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

Reply via email to