我遇到了一个我似乎无法解决的小问题,现在已经解决了几个小时无济于事。
我已经定义了一个数据类型,Hand。
data Hand = Empty | Add Card Hand
deriving (Eq, Show)
我正在使用的另一种类型:
data Card = Card { rank :: Rank, suit :: Suit }
deriving (Eq, Show)
我正在尝试创建一个中缀运算符,它将添加两只手并返回第三只手。
(<+) :: Hand -> Hand -> Hand
(<+) (Add c1 h1) (empty) = (Add c1 h1)
(<+) hand1 (Add c2 hand2) = (Add c2 (hand1 <+ hand2))
当我对此进行快速检查测试以查看它是否具有关联性时,我在几次后出现错误。错误说:
BlackJack.hs:(71,1)-(72,53): Non-exhaustive patterns in function <+
它返回给我的三个参数是空的(总是这个作为第一个),然后是一只大手作为第二个和第三个参数。例如:
另外,quickchest 测试看起来像
((hand1 <+ hand2) <+ hand3) == (hand1 <+ (hand2 <+ hand3))
.
我猜我没有足够的案例来处理所有可能的情况?我只是不知道出了什么问题。:(
请不要直接解决,提示会做!
编辑:作为一个有用的评论者建议并添加了一个案例,当两只手都是空的时,它会返回空手。现在一切正常。:) 为了消除混乱,我早些时候宣布了什么是空手。Empty 和 empty 在我的代码中是两个不同的东西,我“正确”地使用了它们。:)