The first six parenthesised expressions are sections, i.e. functions that take one argument and "put it on the missing side of the infix operator" (see this haskell.org wiki). In contrast, (-2)
is, not a function, but a number (negative 2):
λ> :t (-2)
(-2) :: Num a => a
If you write
λ> (-2) 1
it looks like you're trying to apply (-2)
(a number) to 1
(which is not possible), and GHCi rightfully complains:
Could not deduce (Num (a0 -> t))
arising from the ambiguity check for ‘it’
from the context (Num (a -> t), Num a)
bound by the inferred type for ‘it’: (Num (a -> t), Num a) => t
at <interactive>:3:1-6
The type variable ‘a0’ is ambiguous
When checking that ‘it’
has the inferred type ‘forall a t. (Num (a -> t), Num a) => t’
Probable cause: the inferred type is ambiguous
If you want a function that subtracts 2
from another number, you can use
(subtract 2)
Compare its type,
λ> :t (subtract 2)
(subtract 2) :: Num a => a -> a
to that of (-2)
(see above).
Terminology addendum (after OP's edit)
Parenthesizing the minus operator turns it into a normal (prefix) function that takes two arguments; therefore ((-) 2)
is not a section, but a partially applied function.
LiveScript
, where(-1)
is number while(- 1)
is partial function. – Omura