計算を静的に表す手段としてArrowが使えるという事をid:MaD:20070816で書いたわけですが、もっと強烈な手段としてTemplate Haskellがあります。 以前作ったOpというArrowでは(>>>)演算によって繋がれたArrowを一旦構文木としてデータ化し、最適化をした後に関数を合成するということをしました。 一方、Template Haskellを使うとHaskellのコード片から直接Haskellの内部表現を得られます。Template Haskellについてはhttp://haskell.org/haskellwiki/Template_Haskellのチュートリアルがとてもわかりやすいです。 % ghci -fth Prelude> :m +Language.Haskell.TH Prelude Language.Haskell.TH> runQ [| 1 + 2