こんな感じで実装できた。Option (Haskell で言うところの Maybe)はモナドの中でもかなりわかりやすく実装しやすい。foreach とか filter は実装してない。 ただ、これだけがあっても、map や flatmap とか foreach とかを組み合わせたときに読みやすい感じの仕組み(Scala の for文にあたるやつ)とかがないとあまりうまみがないな、と感じた。最後のほうのテストケースとか見ると、 Scala の for 文がいかにすばらしいかってことを痛感する感じになってる。 その辺の構文を追加する黒魔術的な実装、今のところ思いついてないので思いつくひとは書いてみてほしいなーって感じがする。