> :t (+1)
(+1) :: Num a => a -> a
> :t (-1)
(-1) :: Num a => a
How come the second one is not a function? Do I have to write (+(-1))
or is there a better way?
> :t (+1)
(+1) :: Num a => a -> a
> :t (-1)
(-1) :: Num a => a
How come the second one is not a function? Do I have to write (+(-1))
or is there a better way?
This is because
(-1)
is interpreted as negative one, however(+1)
is interpreted as the curried function(\x->1+x)
.In haskell,
(a **)
is syntactic sugar for(**) a
, and(** a)
is(\x -> x ** a)
. However(-)
is a special case since it is both a unary operator (negate) and a binary operator (minus). Therefore this syntactic sugar cannot be applied unambiguously here. When you want(\x -> a - x)
you can write(-) a
, and, as already answered in Currying subtraction, you can use the functionsnegate
andsubtract
to disambiguate between the unary and binary-
functions.(-1)
is negative one, as others have noted. The subtract one function is\x -> x-1
,flip (-) 1
or indeed(+ (-1))
.-
is treated as a special case in the expression grammar.+
is not, presumably because positive literals don't need the leading plus and allowing it would lead to even more confusion.Edit: I got it wrong the first time.
((-) 1)
is the function "subtract from one", or(\x -> 1-x)
.I just found a function called
subtract
, so I can also saysubtract 1
. I find that quite readable :-)