~ patterns
Patryk Zadarnowski
patrykz at cse.unsw.edu.au
Tue Jan 31 19:32:28 EST 2006
On 31/01/2006, at 9:31 PM, Simon Marlow wrote:
> We must find *something* to throw away though! :-)
One small issue that I'd love to see thrown away is the special
handling the the unary "-"
operator in Haskell 98. It's been described as "embarrassing",
"ugly", and even "inconvenient"
I, for one, find myself creating sections of the form `+ (-x)` all
the time, and it feels wrong.
The proposal would be to remove the unary "-" altogether, and,
instead, extend the lexical
syntax of numeric constant to allow "+" and "-" prefix. Further, we
would need to extend
the prelude with an additional definition:
negate :: Num a -> Num a
negate x = 0 - x
Pros:
1. Removes an embarrassing special case from the grammar.
2. Makes the section `- x` work as expected.
3. Expressions such as "-1" would not require paranthesizing.
4. Expressions such as "-1" would be permitted in k-patterns
even if n+k patterns end up being thrown out.
5. You can say "negate $ 1 + 2" if you don't like parentheses.
6. The precedent of making an operator symbol behave differently when
not separated from its argument by a space has already been made by
the "." operator.
Cons:
1. Expressions of the form "-x" (where "x" is not a constant) need to
be rewritten
as "negate x" (which, to me, looks much cleaner anyway,
especially as, more
often than not, "x" ends up being a complex expression anyway!
2. Possible confusion to the beginners (can write "-1" but cannot
write "-x".)
However, I think that the strange behaviour of sections and the
need for
parentheses around "-1" is already confusing enough to
beginners, and
therefore this chance would actually make Haskell *easier* to
learn, not
harder. "negate x" looks so much more like ordinary Haskell code!
What do people think?
- Pat.
More information about the Haskell-prime
mailing list