【发布时间】:2019-05-19 17:26:00
【问题描述】:
我是学习 Haskell 的初学者。但不太确定Either 在模式匹配中的工作原理。
这是我的代码:
type Rank = Either Pip Court
type Pip = Int
type Deck = [Card]
data Card = Joker | Card Suit Rank
data Court = Ace | Jack | Queen | King deriving (Show, Eq, Ord)
data Suit = Hearts | Diamonds | Clubs | Spades deriving (Show, Ord, Eq)
snap :: Card -> Card -> String
snap Joker Joker = "SNAP"
snap (Card s1 r1) (Card s2 r2)
| r1 == r2 = "SNAP"
snap _ _ = "..."
GHCi 告诉我Couldn't match type ‘Court’ with ‘Either Pip Court’,有人可以帮我吗?
【问题讨论】:
-
无法复制。该代码在我系统上的 GHCi 中加载良好。
-
你在 GHCi 中尝试了什么?
-
GHC 抱怨脚本的哪一部分?,发布完整的错误
-
听起来您正在尝试使用
Card Hearts Jack而不是Card Hearts (Right Jack)之类的内容创建卡片。 (同样,Card Hearts (Left 3)。) -
@chepner 我想我误解了与数据类型不匹配的任何一个的含义,尤其是当类型在这种语言中如此重要时:)
标签: haskell types pattern-matching either