class MonadPromise<E> { Promise<E> pure(E e) { return new Promise.fromValue(e); } Promise<E> bind(Promise<E> p1, Promise<E> f(E e)) { Promise<E> p2 = f(p1.value); return p2; } } main() { Promise<num> dbl(num n) { return new Promise.fromValue(n * 2); } MonadPromise m = new MonadPromise(); print(m.bind(m.pure(1), dbl).value == dbl(1).value); print(m.bind(m.pure(1), m.pure).value == m.pure(1).value); }
三つめ書く前に飽きた、というかこれだと実用的に意味ない。そしてモナドの中の人に怒られそう。