Подтвердить что ты не робот

Должен ли 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 использовать короткие имена для типов?

4b9b3361

Ответ 1

Вы можете передать аргумент ghc из ghc-mod как:

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

Это отправит аргумент -dsuppress-module-prefixes в ghc.

Ответ 2

Вы можете попробовать передать -dsuppress-module-prefixes как параметр GHC. В какой-то момент это помогло мне избавиться от отборочных модулей в именах.