pasberth/Macra

!do は廃止する

Opened this issue · 4 comments

もともと !do って

#[ a; b : *        -> *   -> *   = !do a b ]

これを書くために導入したんだけど、これって

#[ a; b : *        -> *   -> *   = !funcall !funcall !lambda x !lambda y y a b ]

と書き直せるはずなんだよね。 (今の master だとうまくいかないっぽいけど)

!do がなくなれば ! から始まる構文がぜんぶインストラクションと 1対1対応するのできれいな仕様になる

うまく行かないのは遅延評価だから、xがthunkのままになってaが評価されないから。
建前上Macraには副作用がないはずだから、これで問題ない。
要するに、!doを廃止したいなら、!doと!printを廃止すればいいと思う。

となると!defineをどうするかだけど、defineは関数への引数にはなり得ないから、そこだけ先行評価するとかかな。

!print も廃止して IO モナドにしよう

define だけ先行評価でいいと思う