为什么 `stack build` 不打印警告,而 `stack ghci` 打印警告?
why `stack build` doesn't print the warning, but `stack ghci` does?
我有一个新项目,代码如下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 选项,由于 source-dirs
设置,它对应于 app/
目录,但是您的 Lib.hs
文件出现在 src/
目录中。据推测,该目录包含 library
目标的源代码,它有一组单独的 GHC 选项。
您需要为相关目标指定这些选项,以便 stack build
正确应用它们。但是,由于您使用的是 hpack,您还可以将它们提取到顶级 ghc-options
部分,该部分将在所有目标之间共享。两种解决方案都应使 stack build
产生您期望的警告。
我不知道为什么 stack ghci
会这样,但我认为 REPL 在某些多目标或多项目配置方面存在问题,所以我并不感到惊讶它在这里做错了。
我有一个新项目,代码如下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 选项,由于 source-dirs
设置,它对应于 app/
目录,但是您的 Lib.hs
文件出现在 src/
目录中。据推测,该目录包含 library
目标的源代码,它有一组单独的 GHC 选项。
您需要为相关目标指定这些选项,以便 stack build
正确应用它们。但是,由于您使用的是 hpack,您还可以将它们提取到顶级 ghc-options
部分,该部分将在所有目标之间共享。两种解决方案都应使 stack build
产生您期望的警告。
我不知道为什么 stack ghci
会这样,但我认为 REPL 在某些多目标或多项目配置方面存在问题,所以我并不感到惊讶它在这里做错了。