@override State<S, B> bind<B>(Function1<A, State<S, B>> f) => new State((S s) { final ran = run(s); return f(ran.value1).run(ran.value2); });