!do は廃止する
Opened this issue · 4 comments
pasberth commented
もともと !do って
#[ a; b : * -> * -> * = !do a b ]
これを書くために導入したんだけど、これって
#[ a; b : * -> * -> * = !funcall !funcall !lambda x !lambda y y a b ]
と書き直せるはずなんだよね。 (今の master だとうまくいかないっぽいけど)
!do がなくなれば !
から始まる構文がぜんぶインストラクションと 1対1対応するのできれいな仕様になる
ympbyc commented
うまく行かないのは遅延評価だから、xがthunkのままになってaが評価されないから。
建前上Macraには副作用がないはずだから、これで問題ない。
要するに、!doを廃止したいなら、!doと!printを廃止すればいいと思う。
ympbyc commented
となると!defineをどうするかだけど、defineは関数への引数にはなり得ないから、そこだけ先行評価するとかかな。
pasberth commented
!print も廃止して IO モナドにしよう
pasberth commented
define だけ先行評価でいいと思う