Christian Maeder wrote:
Hi,

I would like haskell to accept the following (currently illegal)
expressions as syntactically valid prefix applications:

f = id \ _ -> []
g = id let x = [] in x
h = id case [] of [] -> []
i = id do []
j = id if True then [] else []

The rational is that expressions starting with a keyword should extend
as far as possible (to the right and over several lines within their
layout).
On page 15/16 of the H98 report I think this could be achieved by:

exp10 ::= fexp

fexp ::= [fexp] keyexp

keyexp ::= \ apat ... -> exp | let ... | ... | aexp

(In fact, maybe for haskell' "$" could be changed to a keyword.)

Alternatively the # symbol could be removed from the pool of symbol chars and used to construct syntactic sugar so you could use

     f = id #$ \_ -> []

to mean exactly

     f = id (\_ -> [])

I think when the idea of $ arose originally people didn't at that time know about the many cases where the use of $ is not semantically equivalent to explict brackets, since this knowledge probably only arose later with the introduction of rank-n polymorphism. (Of course the need for #$ would be fixed with impredicative types as in MLF.)

Best regards,
Brian.
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to