Example 2. Pseudo-Java with an invented notation for higher-order polymorphism[4]
interface Transformer<X, Y> { Y transform(X x); } interface Monad<M> { // M :: * -> * <A> M<A> pure(A a); <A, B> M<B> bind(Transformer<A, M<B>> t, M<A> a); }
[4] or C# with a slight syntax change