GHC-mod是否必须使用全名来表示types?

我正在尝试使用ghc-mod vim插件进行types/语法检查等。但是,我发现ghc-mod总是在错误消息中使用types的完整path,例如:

 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使用短名称的types?

你可以将参数从ghc-mod传递给ghc,如下所示:

 $ ghc-mod lint *.hs -g -dsuppress-module-prefixes 

这会将参数-dsuppress-module-prefixes发送给ghc。

您可以尝试传递-dsuppress-module-prefixes作为GHC选项。 在某种程度上,它确实帮助我摆脱了名称中的模块限定符。