我正在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。
答案 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
警告。