我遇到了一个我似乎无法解决的小问题,现在几个小时都无法解决。
我已经定义了一种数据类型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))
。
我猜我没有足够的案例处理每一种可能的情况?我只是无法弄清楚出了什么问题。 :(
请不要直接解决,提示会做!
编辑:作为一名有用的评论者建议并添加了一个案例,当两只手空时,它会返回空手。一切都很好。 :) 为了消除困惑,我已经宣布了空手的早期。在我的代码中,空和空是两个不同的东西,我正确地使用它们。 :)