GHC警告在让绑定中无可辩驳的模式

时间:2017-12-17 15:57:43

标签: haskell

我正在Haskell中编写国际象棋程序,在运行时测试时遇到Irrefutable pattern failed...错误。

我有以下数据类型:

data Color = ...
data Piece = ...
data CPiece = CP Color Piece | Null

问题出现在:

let startPiece = getPiece board start in
  let CP startColor _ = startPiece in

getPiece返回CPiece,我知道我没有考虑Null构造函数,而应该使用case getPiece board start of ...语句。

但是,为什么GHC没有发出任何警告?我打开了-Wall-Wincomplete-uni-patterns,我在Debian上使用了GHC 8.0.2。

1 个答案:

答案 0 :(得分:0)

我的错误; ghc默认情况下在make mode中运行,在尝试不同的切换时,我已经运行了:

$ ghc -Wall file.hs
$ ghc -Wall -Wincomplete-uni-patterns file.hs

连续。 ghc的第二次调用不会编译file.hs,因为自第一次调用以来它已经被编译和未修改。

运行

$ touch file.hs
$ ghc -Wall -Wincomplete-uni-patterns file.hs

更新源文件的时间戳,然后编译产生{I}我想要的Pattern match(es) are non-exhaustive警告。