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