注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
限定版IOみたいなモナドを簡単に作れたら、コードが分離できるしテストもしやすくなるのになあ… 数か月... 限定版IOみたいなモナドを簡単に作れたら、コードが分離できるしテストもしやすくなるのになあ… 数か月前なら、 それ、Freeモナド*1でできるよ! と返されるだろう。だが今は違う。Freeモナドよりも簡単にモナドを作れるモナド、Operationalモナドがあるのだ。 Freeモナドについて復習しよう。FreeモナドはFunctorを基にMonadを作れる構造であり、Functorで自分自身を包むことによってモナドの力を得ている*2。FunctorそのものはDeriveFunctor拡張を使って簡単に作れる。 {-# LANGUAGE DeriveFunctor #-} import Control.Monad.Free data CharIO a = PutCh Char a | GetCh (Char -> a) | LiftIO (IO a) deriving Functor put
2013/05/11 リンク