Stefan O'Rear wrote:
On Wed, Aug 15, 2007 at 06:58:40PM +0100, Duncan Coutts wrote:
On Wed, 2007-08-15 at 10:50 -0700, Stefan O'Rear wrote:
OTOH, your proposal provides (IMO) much more natural syntax for
multi-pattern anonymous functions, especially if we stipulate that
unlike a case (but like a lambda) you can have multiple arguments; then
you could write stuff like:
sumTo0 = foldr (\of 0 k -> 0
n k -> n + k) 0
sumTo0 = foldr (\0 k -> 0
n k -> n + k) 0
foo = getSomethingCPS $ \ arg ->
moreStuff
is now a syntax error (\ { varid -> } matches no productions).
A multi-way lambda could be introduced using \\ thus:
sumTo0 = foldr (\\ 0 k -> 0; n k -> n + k) 0
[from a previous post]
It's not like the current language has that property; consider (map
myFunction) - is that an error or a partial application?
By "construct" I meant only those grammatical elements involving keywords, and
was thinking about situations where you might for example have various syntax templates
bound to function keys eg in Haskell the following are incomplete:
case of
if then else
data where deriving
("let in" could still be marked as incomplete even if it is ok according to the
grammar since it would be weird to bother writing a let with no bindings.)
There is a similar problem with the way template haskell uses unmatched quotes
such as 'a so it's no longer possible to determine whether this should be
marked as an incomplete character literal or a complete TH name.
I suppose my main point is that it's useful for a syntax to have plenty of "unfilled
gaps" that result in an error when written rather than filling all those gaps with
different meanings...
Brian.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe