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
の意味合いはないから……♪