为什么`stack build`不能显示警告,而`stack ghci`可以显示警告?

时间:2018-08-30 04:39:02

标签: haskell haskell-stack

我有一个新项目,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 :(得分:5)

您已经为tt-exe可执行目标设置了各种GHC选项,由于app/的设置,该目标对应于source-dirs目录,但是您的Lib.hs文件似乎是在src/目录中。大概该目录包含library目标的源代码,该目标具有一组单独的GHC选项。

您需要为相关目标指定这些选项,以便stack build正确应用它们。但是,由于使用的是hpack,因此也可以将它们提取到顶级ghc-options部分中,该部分将在所有目标之间共享。两种解决方案都应使stack build发出您期望的警告。

我不知道为什么stack ghci会表现出来,但是我认为REPL在某些多目标或多项目配置方面遇到了麻烦,所以我并不完全惊讶这里有问题。