Haskell @运算符混乱

时间:2017-05-07 05:01:14

标签: haskell

data Nat = Zero | Succ Nat 
       deriving (Eq, Show)

-- Add two Natural number
addNat :: Nat -> Nat -> Nat 
addNat Zero Zero         = Zero
addNat Zero n@(Succ _)   = n
addNat n@(Succ _) Zero   = n
addNat (Succ x) (Succ y) = Succ (Succ (addNat x y))

我对Haskell函数中的@运算符感到困惑。

我想知道addNat Zero n@(Succ _) = n的含义是什么?

这是否意味着addNat Zero Succ b = Succ b

1 个答案:

答案 0 :(得分:2)

如果name是变量名,而pat是模式,则name@pat是一种与pat完全匹配的模式,并且还绑定{{1}匹配name的值。所以:

pat

说"如果第一个参数是addNat n@(Succ _) Zero = n 而第二个参数是Succ,则返回第一个参数"。