愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

DartのPromiseでモナド

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);
}


三つめ書く前に飽きた、というかこれだと実用的に意味ない。そしてモナドの中の人に怒られそう。