Monadを調べていると、モナモナ言いたくなりますね! さて、OptionをMonad対応する例を書いてみます。 Monad型クラスは次のような定義になっています。returnと>>=を実装せいということらしい。 class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> m b x >> y = x >>= \_ -> y fail :: String -> m a fail msg = error msg return関数はApplicative Functorのpureと同等の処理でよいらしいので、値コンストラクタを指定します。 >>=*1はOptionと、Someの値を引数にとりOptionを返す関数を受け取り、Optionを返します。 >>は問答無用