モナド
[id:lethevert:20051122:p1]
要は、パターンマッチを使って、「可能な計算状態の集合」の要素に対して、適切な処理を割り当てていきましょうということだよね。
つまり、こんな感じ?
::状態 = A a | B b | C c f :: a -> 状態 f :: b -> 状態 f :: c -> 状態 bind (A a) f = f a bind (B b) f = f b bind (C c) f = f c
あ、でも、このコードは、Concurrent Cleanでは実現不可能だ。
::状態 = A x | B f :: x -> 状態 bind (A x) f = f x bind _ _ = B
こんな形しかかけない?でも、これは、Maybeモナドと同じ形だよね。これさえできれば十分?