-1

假设我们有下一个数据:

data Value =
IntVal Int
| BoolVal Bool

和功能

f :: Value -> Int

如何在 Value 类型的参数上区分不同构造函数的案例?f (IntVal 1)一种行为和另一种行为也是如此f (BoolVal True)

4

1 回答 1

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)
于 2013-02-05T06:48:45.080 回答