A wrapper of type W that contains zero or more elements of type a.
A function named functionname that takes a value of type a, a value of type b and returns a value of type c.
A function named F that takes a value of type a and returns a value of type b.
This is notation is equivalent to b F(a), but is used whenever we pass a function as a parameter.
W<b> fmap(W<a>,F<a,b>)
W<a> pure(a)
W<F<a,b>> pure(F<a,b>)
W<b> compose(W<a>,W<F<a,b>>)
W<a> return(a)
W<F<a,b>> return(F<a,b>)
W<b> bind(W<a>,F<a,W<b>>)
Note: Applicative.pure = Monad.return