Write Yourself a Scheme in 48 Hoursを読んでいる。8章のクロージャ
定義がこうなっていた。
PrimitiveFunc ([LispVal] -> ThrowsError LispVal) Func {params :: [String], vararg :: (Maybe String), body :: [LispVal], closure :: Env}
スタックにつまないで環境をそのまま詰め込むのか。
そういえばRWHでも似たようなこと書いてあったような気がしたんだけど、どこだか忘れた。
Haskellの場合はカリー化で束縛してもいいし、データコンストラクタで束縛してもいいのか。