почему `build build` не выводит предупреждение, а` stack ghci`? - PullRequest
0 голосов
/ 30 августа 2018

У меня новый проект со следующим кодом в Lib.hs

data ABC
  = A
  | B
  | C

abc :: ABC -> Int
abc A = 1
abc B = 2

Я хочу, чтобы stack build потерпел неудачу и намекнул, что не справился abc C.

В package.yaml включены следующие флаги:

library:
  source-dirs: src

executables:
  tt-exe:
    main:                Main.hs
    source-dirs:         app
    ghc-options:
    - -threaded
    - -rtsopts
    - -with-rtsopts=-N
    dependencies:
    - tt

Но stack build компилируется без предупреждения, без ошибок. Тем не менее, stack ghci может дать мне следующие предупреждения:

/Users/leo/zhangchiqing/te/tt/src/Lib.hs:11:1: warning: [-Wincomplete-patterns]
    Pattern match(es) are non-exhaustive
    In an equation for ‘abc’: Patterns not matched: C
   |
11 | abc A = 1
   | ^^^^^^^^^...

Я что-то пропустил, почему stack build не выходит из строя?

GHC версия 8.2.2, распознаватель стека: lts-11.1

1 Ответ

0 голосов
/ 30 августа 2018

Вы установили различные параметры GHC для исполняемой цели tt-exe, что соответствует каталогу app/ из-за настройки source-dirs, но ваш файл Lib.hs, похоже, находится в каталоге src/. Предположительно, этот каталог содержит исходный код цели library, которая имеет отдельный набор параметров GHC.

Вам необходимо указать эти опции для соответствующей цели, чтобы stack build применил их правильно. Однако, так как вы используете hpack, вы также можете извлечь их в раздел ghc-options верхнего уровня, который будет использоваться всеми целями. Любое решение должно заставить stack build выдать ожидаемое предупреждение.

Я не знаю, почему stack ghci ведет себя так, как он, но я думаю, что REPL, как известно, имеет проблемы с определенными многоцелевыми или многопроектными конфигурациями, поэтому я не совсем удивлен, что он делает что-то не так здесь.

...