假设我们有下一个数据:
data Value =
IntVal Int
| BoolVal Bool
和功能
f :: Value -> Int
如何在Value类型的参数上分离不同构造函数的案例?
因此f (IntVal 1)
有一种行为,f (BoolVal True)
有另一种行为。
答案 0 :(得分:4)
有一些流行的方法是在函数参数中使用模式匹配。
negateValue :: Value -> Value
negateValue (IntVal n) = IntVal (-n)
negateValue (BoolVal p) = BoolVal (not p)
另一种方法是使用案例模式。
使用案例:
negateValue val = case val of
IntVal n -> IntVal (-n)
BoolVal p -> BoolVal (not p)