-1

次のデータがあると仮定します。

data Value =
IntVal Int
| BoolVal Bool

と機能

f :: Value -> Int

Value型の引数で異なるコンストラクターのケースを分離するにはどうすればよいですか?つまりf (IntVal 1)、1つの動作f (BoolVal True)があり、別の動作があります。

4

1 に答える 1

4

関数パラメーターでパターン マッチングを使用する方法がいくつかあります。

negateValue :: Value -> Value
negateValue (IntVal  n) = IntVal  (-n)
negateValue (BoolVal p) = BoolVal (not p)

もう 1 つの方法は、ケース パターンを使用することです。

使用例:

negateValue val = case val of
    IntVal  n -> IntVal  (-n)
    BoolVal p -> BoolVal (not p)
于 2013-02-05T06:48:45.080 に答える