haskell - prelude - ¿GHC-mod tiene que usar nombres completos para los tipos?
tipos de datos haskell (2)
Estoy tratando de usar el
ghc-mod
vim para hacer una verificación de tipo / sintaxis, etc. Sin embargo, descubrí que
ghc-mod
siempre usa rutas completas de tipos en los mensajes de error, por ejemplo:
test.hs|71 col 13 error| Couldn''t match type ‘Data.Text.Internal.Text’
|| with ‘[GHC.Types.Char]’
|| Expected type: containers-0.5.6.2:Data.Map.Base.Map
|| [GHC.Types.Char]
|| ([(integer-gmp-1.0.0.0:GHC.Integer.Type.Integer,
|| integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)],
|| containers-0.5.6.2:Data.Set.Base.Set
|| integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)
|| Actual type: containers-0.5.6.2:Data.Map.Base.Map
|| Data.Text.Internal.Text
|| ([(integer-gmp-1.0.0.0:GHC.Integer.Type.Integer,
|| integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)],
|| containers-0.5.6.2:Data.Set.Base.Set
|| integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)
|| In the second argument of ‘containers-0.5.6.2:Data.Map.Base.map’, namely
|| ‘zippedMap’
|| In the second argument of ‘(GHC.Base.$)’, namely
|| ‘containers-0.5.6.2:Data.Map.Base.map
...
que abarrota la pantalla y es muy difícil para mí averiguar dónde salió mal.
Como comparación, este es el mensaje de error para el mismo archivo usando
ghci
:
test.hs:71:13:
Couldn''t match type ‘T.Text’ with ‘[Char]’
Expected type: M.Map [Char] ([(Integer, Integer)], S.Set Integer)
Actual type: M.Map T.Text ([(Integer, Integer)], S.Set Integer)
In the second argument of ‘M.map’, namely ‘zippedMap’
In the second argument of ‘($)’, namely
‘M.map
...
Que es mucho más limpio.
¿Hay alguna manera de hacer que
ghc-mod
use nombres cortos para los tipos?
Puede intentar pasar
-dsuppress-module-prefixes
como una opción de GHC.
En algún momento, me ayudó a deshacerme de los calificadores de módulo en los nombres.
Puede pasar el argumento a ghc desde ghc-mod como:
$ ghc-mod lint *.hs -g -dsuppress-module-prefixes
Esto enviará el argumento
-dsuppress-module-prefixes
a ghc.