In fact, there are lots of possible instances of the Monad
interface. Even Transformer
with one type variable applied is a monad.
Example 4. The Transformer<X, _> monad
new Monad<Transformer<X, _>>() { public <A> Transformer<X, A> pure(A a) { return new Transformer<X, A>() { public A transform(X x) { return a; } }; } public <A, B> Transformer<X, B> bind( Transformer<A, Transformer<X, B>> t, Transformer<X, A> a) { return new Transformer<X, B>() { public B transform(X x) { return t.transform(a.transform(x)).transform(x); } }; } };