primitive.clj は使う。これがないとやってられない〜〜
>>= 、直した
map-m と for-m 追加〜
do-monad とか冗長だし do-m でいい。
letfn のところが読みにくかった。
join 追加。
よく考えたら bind の this は必要なかった。
Functor 追加。
maybe bind という定義、冗長だった。 maybe-unit はあってもいいかもしれない。
when と unless も追加。 infix で指定した方が嬉しいかもしれないけど、デフォルトで多すぎてもあれなので、あとで考える
monad の >>= のところを抽象化。これで MonadState みたいなのも作れる
すべのてObjectはコンテキストをそれ自身と推論でき、具体化するとそれ自身となるように定義する
Abstract って名前抽象的過ぎるし、 Monad 専用のものではないから, infixing.control.TypeClass とする