Couldn't '\' delimit a subexpression, as parentheses do? Would there be any ambiguity in accepting code like State \s -> (s, s) instead of requiring State $ \s -> (s, s), or taking

Looking at the Haskell 98 language definition it seems that a whole class of these expressions are disallowed inside function applications:
> exp10   ->     \ apat1 ... apatn -> exp
>         |     let decls in exp
>         |     if exp then exp else exp
>         |     case exp of { alts }
>         |     do { stmts }
>         |     fexp

This means that none of the following are legal Haskell declarations, even though they are unambiguous:
> a = State \s -> (s, s)
> b = map let f x = x + 1 in f
> c = return if a then b else c
> d = catch do x <- getLine
>              return x

It can be argued that this is mostly obfuscation, and that it can sometimes be confusing, especially with let and do, but it saves on the amount of parentheses or $s. What was the original reasoning for disallowing these more complex expressions as the rightmost argument in an fexp? Or was this simply not considered?

Twan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to