Operators
Operators behave just like functions in Haskell and can be curried, passed around and applied.
x = (+10) -- currying the first argument of the + function
x 20 -- = 30
The order in which you parenthesise non-commutative operators matters.
(1/) 2 -- = 0.5
(/1) 2 -- = 2.0
The minus operator is also a special case because the parenthesised - minus operator doubles as the negate function and simply returns a number meaning it cannot be sectioned and applied leading to an error.
(-1) 2 -- ERROR
You can only section the - minus operator with the operand in the right position.
(1-) 2 -- = -1
$ operator
The $ operator allows you to reduce the amount of brackets used in your code by applying the result of functions to one another as an infixr operator with a low priority, thus the right most part of an expression is evaluated and applied and then the next rightmost and so on.
For the example, the following function uses a lot of nested parentheses making it more difficult to read.
max 10 (min 20 (max 2 5)) -- = 10
This can be rewritten using the $ operator to express the same application of functions.
max 10 $ min 20 $ max 2 5 -- = 10
The definition of the $ operator is:
f $ a = f a
Conditionals
You can express NOT EQUAL to by using the /= operator. Different from the usual != operator in almost all other languages. This is intended to be reminiscent of the ≠ symbol.
2 /= 3
-- True
2 /= 2
-- False
Piping
You can pipe data in a left to right manner similar to a standard | pipe function using the & operator from the Data.Function library which sequential passes the result of each function into the next.
import Data.Function
reverse [1, 2, 3, 4] & head & succ
-- 5