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

参考ページ

筆者プロフィール

my-latest-logo

aiya000(あいや)

せつラボ 〜圏論の基本〜」 「せつラボ2~雲と天使と関手圏~」 「矢澤にこ先輩といっしょに代数!」を書いています!

強い静的型付けとテストを用いて、バグを防ぐのが好き。Haskell・TypeScript。