Drkcore

27 06 2012 Haskell Tweet

モナド変換子を重ねまくれ

すごいHaskellのモナド変換子を理解したら読めばいいと思います、というか読むべき。超わかりやすかった。合体ロボ並に合成されて強そうな型に変換していく様は圧巻のゴーカイジャー(見てないからしらんけど)

  • Monad Transformers Step by Step

スマイルプリキュアで例えると、「プリキュア・レインボーヒーリング」ですね(多分)。

ProductName スマイルプリキュア 300ラージピース スマイルプリキュア! 300-L336

エンスカイ / 1527円 ( 2012-02-26 )


最初に簡単な評価器からはじめる

eval0 :: Env -> Exp -> Value

という型から始めてモナドにする。

type Eval1  a = Identity a

次にエラーモナド変換子を重ねて

type Eval2  a = ErrorT String Identity a

環境であるReaderTを重ねる

type Eval3 a = ReaderT Env (ErrorT String Identity) a

続いて、状態を重ねる

type Eval4 a = ReaderT Env (ErrorT String (StateT Integer Identity)) a

ログ機能を導入して

type Eval5 q = ReaderT Env (ErrorT String
  (WriterT [String ] (StateT Integer Identity))) q

最後にお約束のIO

type Eval6 a = ReaderT Env (ErrorT String
  (WriterT [String ] (StateT Integer IO))) a

順番にテンポよく積み上がっていくので、読んでて悩むことなく最後の型まで到達できるので素晴らしい。英語も平易だし。

さらっと読んでみてよく分からなかったら、すごいHaskellに立ち戻ればいいでしょう。

ProductName すごいHaskellたのしく学ぼう!
Miran Lipovača
オーム社 / 2940円 ( 2012-05-23 )


About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021