我有一个新项目,在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
您已为tt-exe
可执行目标设置了各种GHC选项,由于app/
设置,该目标对应于source-dirs
目录,但您的Lib.hs
文件似乎位于src/
目录中。据推测,此目录包含library
目标的源代码,该目标具有一组单独的GHC选项。
您需要为相关目标指定这些选项,以便stack build
正确应用它们。但是,由于您正在使用hpack,您还可以将它们提取到顶级ghc-options
部分,该部分将在所有目标之间共享。任何一种解决方案都应该让stack build
产生你期望的警告。
我不知道为什么stack ghci
的行为方式如此,但我认为REPL在某些多目标或多项目配置方面存在问题,所以我不会完全惊讶它在这里做错了什么。