We can write functions that abstract on the type constructor and needn't be repeated. Similar to a
sort
function that accepts any value that has declared itself the ability to compare, these functions
can act on any type constructor that has declared itself a monad.
<A> M<List<A>> sequence(List<M<A>> list)
<A> M<List<A>> replicate(int n, M<A> a)
<A> M<A> join(M<M<A>> a)
etc. etc.