簡體   English   中英

為什么`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在某些多目標或多項目配置方面存在問題,所以我並不完全驚訝它在這里做錯了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM