[Haskell-cafe] map (-2) [1..5]

Brian Hulley brianh at metamilk.com
Thu Aug 17 06:14:32 EDT 2006

Tamas K Papp wrote:
> The code in the subject generates an error.  I understand why this is
> (- is treated as part of the number), but I don't know how to solve
> it, ie how to tell Haskell that - is a function/binary operator?

Actually looking at the Haskell98 report, -2 seems to be treated as (negate 
(2)), which I find really strange because there does not appear to be any 
way of specifying negative literals, and the range of negative values is 
always 1 more than the range of positive values (when you use a fixed 
bit-length representation eg Int instead of Integer)

I'd have thought it would have been simpler to just make the rule that -2 
(no spaces between '-' and '2') would be a single lexeme, and then people 
could just use (negate x) or (0 - x) instead of having a special rule and a 
whole lot of confusion just for one arithmetic operator, which is never 
actually needed in the first place (just as we don't need /x because it is 
simple enough to write 1/x).

I see with great disappointment that Haskell' Trac ticket#50 [1] looks as if 
it will not be accepted [2] so we're likely to be stuck with this for years 
to come...

[1] http://hackage.haskell.org/trac/haskell-prime/ticket/50
[2] http://hackage.haskell.org/trac/haskell-prime/wiki/StrawPoll-2

So in answer to your question, you can't (except for workarounds already 

Regards, Brian.
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.


More information about the Haskell-Cafe mailing list