次のデータがあると仮定します。
data Value =
IntVal Int
| BoolVal Bool
と機能
f :: Value -> Int
Value型の引数で異なるコンストラクターのケースを分離するにはどうすればよいですか?つまりf (IntVal 1)
、1つの動作f (BoolVal True)
があり、別の動作があります。
次のデータがあると仮定します。
data Value =
IntVal Int
| BoolVal Bool
と機能
f :: Value -> Int
Value型の引数で異なるコンストラクターのケースを分離するにはどうすればよいですか?つまりf (IntVal 1)
、1つの動作f (BoolVal True)
があり、別の動作があります。
関数パラメーターでパターン マッチングを使用する方法がいくつかあります。
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)