So what, why do I care?

Repetition is for solving non-problems using clumsy languages

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.