モナド

[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モナドと同じ形だよね。これさえできれば十分?