MaybeTを使ってリファクタリングしたずら
オラ、今日はLisp処理系の作成を進めてたずら。
最初はIOの文脈で<-するために、Monadの順序の入れ替え用のこんな関数を使って連鎖してたずら。
flipUp :: Maybe (IO a) -> IO (Maybe a)けどオラはここで、奇妙な既視感を覚えた。 「この連鎖、何かに似てる」……って。
この正体は「MonadTransのモナドバインド(>>=)」だったずら。
MonadTransであるMaybeT……を使ったMaybeT IOで上のrepl数を書き換えると
こう何度もfmapしてたものをこのように……
平坦なコードにできるずら!
しかもMaybeT IOのrepl関数内ではMaybeの性質を完全に文脈に持たせてるから、
IOのときのようにいちいちそれがMaybe aの値であることを意味しなくて済むずら〜♪
ほら、各名前にmaybeほにゃらら〜〜って命名をしないようにしたずら。
だってそこには、Maybeの意味合いはないから……♪

