GHC-mod 必须使用类型的全名吗?

我正在尝试使用 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对这些类型使用简称?

1727 次浏览

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

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

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

这将把参数 -dsuppress-module-prefixes发送到 ghc。