在下面的代码中,函数disp
是通过解构Sum b c
然后立即重建来定义的。问题是,我不需要b
和c
,只需要Sum
类型的事实。
data Expr = Name String | Sum Expr Expr
deriving(Show)
disp (Sum (Name a) (Sum b c)) = a ++ ":" ++ disp (Sum b c)
有没有一种方法可以在没有这种解构的情况下编写disp
- 重建(以及b
和c
绑定),或者这是编写这样一个函数的正确方法吗?
答案 0 :(得分:14)
disp (Sum (Name a) s@(Sum _ _)) = a ++ ":" ++ disp s
@
允许多个匹配同一件事