为什么`stack build`不打印警告,但`stack ghci`呢?

Leo*_*ang 3 haskell haskell-stack

我有一个新项目,其中包含以下代码 Lib.hs

data ABC
  = A
  | B
  | C

abc :: ABC -> Int
abc A = 1
abc B = 2
Run Code Online (Sandbox Code Playgroud)

我想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
Run Code Online (Sandbox Code Playgroud)

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
   | ^^^^^^^^^...
Run Code Online (Sandbox Code Playgroud)

我错过了什么,为什么stack build不失败?

GHC版本8.2.2,堆栈解析器:lts-11.1

Ale*_*ing 5

您已为tt-exe可执行目标设置了各种GHC选项,这些选项对应于设置所在的app/目录source-dirs,但您的Lib.hs文件似乎位于src/目录中.据推测,此目录包含library目标的源代码,该代码具有一组单独的GHC选项.

您需要为相关目标指定这些选项才能stack build正确应用它们.但是,由于您正在使用hpack,您还可以将它们提取到顶级ghc-options部分,该部分将在所有目标之间共享.任何一种解决方案都应该stack build产生你期望的警告.

我不知道为什么会这样做stack ghci,但我认为REPL在某些多目标或多项目配置方面存在问题,所以我并不完全惊讶它在这里做错了什么.