2015-09-20 5 views
143

Я пытаюсь использовать ghc-mod VIM плагин, чтобы сделать тип/синтаксис проверки и т.д. Тем не менее, я обнаружил, что ghc-mod всегда используют полные пути типов в сообщениях об ошибках, например:Должен ли 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 использовать короткие названия для типов?

+3

Это не наблюдаемое поведение для меня. Это все еще происходит для вас? Какие версии 'ghc' и' ghc-mod' вы используете? – dkasak

+3

У вас есть собственный пример (импорт включен), который генерирует выходные данные, как указано выше? Я думаю, у меня есть идея, какая проблема может быть, но немного сложно сказать только с выхода ... – Alec

ответ

0

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

1

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

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

Это пошлет аргумент -dsuppress-module-prefixes к GHC.