Quick summary: I'll remove the #:before-first and #:after-last
feature. If anyone wants them, please tell me -- maybe it can be left
for the spliced case, or maybe they could always be spliced.
On Monday, Matthew Flatt wrote:
I'm not enthusiastic about this proposal.
As you say at the start, it seems like a rare case. My main
objection is that it's too rare to merit a change to the main
`lambda' form and other parts of our infrastructure, such as
documentation tools.
This -- a more substantial extension of `lambda' and friends -- seems
to be the core issue here. I've talked about it to Matthias, and we
agreed on something that would help. I'll post about it separately,
when I land.
As a weaker objection, I don't agree with the suggestion that naive
users can somehow ignore the `no-argument' value. I think it would show
up prominently in documentation, contracts, and types.
I didn't mean that they'll ignore it -- I meant that having a default
expression that is rendered as no-argument or something similar is
self explanatory in a better way than , and definitely from an
additional #:nothing argument (which is an actual interface change in
addition to being obscure).
Weaker still, in terms of how well I can defend it: I'm suspicious
of no-value values in general. Granted, we already have `#f',
#void, and #undefined, but I'm not really happy about that (and
I keep thinking about ways to get rid of #undefined).
This could be solved, roughly, by what both Robby and Matthias
suggested (protecting it from leaking out), but on one hand there's a
problem with that, and on the other it makes it equivalent to exposing
a boolean flag for the presence of an argument. That's the thing that
I'll delay for a proper post on that. Side-question: do you have some
potential direction for eliminating #undefined? (Asking because it
might apply here too.)
(Is there any problem with #void?)
Meanwhile, the interface change, the gensym-encouraging, and the
obscurer explanation really bother me, so I'll just get rid of the
need for them by removing the #:before-first and #:after-last feature.
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!
_
Racket Developers list:
http://lists.racket-lang.org/dev