Как заставить Хаскеро предупреждать о неисчерпывающих совпадениях
В настоящее время я оцениваю Haskero в Visual Studio Code как альтернативный редактор Haskell вместо Atom с Atom-Haskell. Пока что Хаскеро выглядит многообещающе, но мне не хватает предупреждений компилятора, которые я обычно получаю от Atom-Haskell.
Чтобы проиллюстрировать проблему, рассмотрим это простое воспроизведение:
Действия по воспроизведению
- Откройте код Visual Studio с уже установленным Haskero
- Добавьте новый файл Haskell:
Repro.hs
- Добавьте следующее содержимое в файл
- Нажмите Сохранить
Содержание файла:
module Repro where
foo :: Maybe a -> a
foo (Just x) = x
Ожидаемое поведение
Редактор должен дать предупреждение о влиянии:
Pattern match(es) are non-exhaustive
In an equation for `foo': Patterns not matched: Nothing
Атом-Хаскелл делает это.
Фактическое поведение
Ничего не произошло. Представление " Проблемы" просто утверждает, что:
Никаких проблем в рабочей области не обнаружено.
Подробнее
Приведенные выше шаги по воспроизведению являются самыми простыми, о которых я мог подумать, но я вижу то же самое (отсутствие) поведения, когда я создаю полный проект стека и проверяю, что я запустил stack build intero
в корне моего каталога проекта.
Моя среда это:
- Windows 10 Pro x64
- Версия стека 1.6.3, версия Git b27e629b8c4ce369e3b8273f04db193b060000db (5454 коммитов) x86_64 hpack-0.20.0
- Visual Studio Code версии 1.20.0
- Хаскеро версия 1.3.1
- Версия Atom 1.23.3 x64
- language-haskell версия 1.17.3
1 ответ
Похоже, вы должны сказать Хаскеро, чтобы превратить любое предупреждение в фатальную ошибку (обратите внимание на -Werror
флаг):
"haskero.intero.ghciOptions": [
"-Wall",
"-Werror"
]
Тем не менее, я не могу понять, почему мы должны это делать, так как это работает из коробки:
stack ghci --with-ghc intero "--ghci-options=-Wall" --no-build --no-load
Кажется, именно так Хаскеро запускает Intero в коде Visual Studio, а в GHCi я вижу предупреждение, не пропуская -Werror
...
Из любопытства я попробовал то же самое с hsdev 0.3.1.2 и Sublime Haskell 91e0d29
и, кажется, работает прямо из коробки:
Надеюсь, это поможет.