Just as regular functions some types could also have arguments:
Supplying parameters to these types is called saturation:
In example above we put a space character between to saturate a type. However, if a parameter type also has its own parameters we have to use parentheses:
In order to abolish parentheses you can use a special type operator called T:
Alternatively there is another type operator with higher starting precedence called T'I:
This operator could be stretched to decrease precedence:
Since all operators are left associative you can use flipped version of T'I operator - I'T to avoid stretching so that you can add new functor layers from left to right:
However this may look uncovenient for many people who get used to syntax with reading/writing functor first. Luckily there is another type operator for composing functors:
There is slightly different type operator that let you form a functor composition - therefore you can avoid saturation:
There is another way to form a new functor from others called jointing - they also form functor compositions, but the context of this type depends on exact functors.