创建中缀运算符

时间:2014-09-13 14:46:43

标签: haskell infix-notation non-exhaustive-patterns

我遇到了一个我似乎无法解决的小问题,现在几个小时都无法解决。

我已经定义了一种数据类型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 <+

它返回给我的三个参数是空的(总是将这个作为第一个参数),然后是一个大手作为第二个和第三个参数。例如:Image of error. 此外,quickchest测试看起来像((hand1 <+ hand2) <+ hand3) == (hand1 <+ (hand2 <+ hand3))

我猜我没有足够的案例处理每一种可能的情况?我只是无法弄清楚出了什么问题。 :(

请不要直接解决,提示会做!

编辑:作为一名有用的评论者建议并添加了一个案例,当两只手空时,它会返回空手。一切都很好。 :) 为了消除困惑,我已经宣布了空手的早期。在我的代码中,空和空是两个不同的东西,我正确地使用它们。 :)

0 个答案:

没有答案