YAPC
会場より。
が、Perlよく知らんのでその他のプレゼンではPugsとRTypeのソースコード読んでました。Monadの重ね合わせ(StateMonad + ControlMonad)の辺り。そこが分かれば後はどんどん読んでました。
type Eval a = EvalT (ContT Value (StateT RTState IO)) a type EvalMonad = EvalT (ContT Value (StateT RTState IO)) newtype EvalT m a = EvalT { runEvalT :: m a }
Stateには評価時の状態(グローバル変数のテーブルとか)を保持させる。ContinuationMonadはRubyで言うとbegin rescueの様なエラー処理機構を実現する為に使われている。
うーん、楽しい。ってYAPC関係無い...。