国防部必须使用全名的类型?
我正在尝试使用ghc-mod
vim插件来进行类型/语法检查等。但是,我发现ghc-mod
总是在错误消息中使用类型的完整路径,例如:
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
...
这让屏幕变得混乱,我很难找出哪里出了问题。 作为比较,这是使用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
...
这更清洁。 有没有办法让这些类型的ghc-mod
使用短名称?
您可以将参数从ghc-mod传递给ghc,如下所示:
$ ghc-mod lint *.hs -g -dsuppress-module-prefixes
这会将参数-dsuppress-module-prefixes
发送给ghc。
您可以尝试将-dsuppress-module-prefixes
作为GHC选项传递。 在某些时候,它确实帮助我摆脱了名称中的模块限定符。