Monad C# example
typeclass Monad<m> { m<b> >>=<a, b>(m<a> wrappedVal, Func<a, m<b>> f); m<b> >><a, b>(m<a> wrappedValA, m<b> wrappedValB); m<a> return_<a>(a val); }