Estou tentando usar o ghc-mod
plug-in vim para fazer a verificação de tipo / sintaxe etc. No entanto, descobri que ghc-mod
sempre usa caminhos completos de tipos nas mensagens de erro, por exemplo:
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 atravessa a tela e é muito difícil descobrir onde deu errado. Como comparação, esta é a mensagem de erro para o mesmo arquivo 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
...
o que é muito mais limpo. Existe uma maneira de ghc-mod
usar nomes abreviados para os tipos?
ghc
eghc-mod
você está usando?Respostas:
Você pode passar o argumento para ghc a partir de ghc-mod como:
Isso enviará o argumento
-dsuppress-module-prefixes
para ghc.fonte
Você pode tentar passar
-dsuppress-module-prefixes
como uma opção do GHC. Em algum momento, isso me ajudou a me livrar dos qualificadores de módulo nos nomes.fonte