anchor.diff:  class StateMonad<S> extends MonadOpsMonad<State<S, dynamic>> {
     StateMonad() : super((a) => new State((S s) => new Tuple2(a, s)));
   
  +  @override State<S, dynamic/*=A*/> pure/*<A>*/(/*=A*/ a) => new State((S s) => new Tuple2(a, s));
  +  @override State<S, dynamic/*=B*/> map/*<A, B>*/(State<S, dynamic/*=A*/> fa, /*=B*/ f(/*=A*/ a)) => fa.map(f);
  +  @override State<S, dynamic/*=B*/> bind/*<A, B>*/(State<S, dynamic/*=A*/> fa, State<S, dynamic/*=B*/> f(/*=A*/ a)) => fa.bind(f);
  +
     State<S, S> get() => new State((S s) => new Tuple2(s, s));
  -  State<S, Unit> put(S newS) => new State((S s) => new Tuple2(unit, newS));
  -  State<S, Unit> modify(S f(S s)) => get().bind((S s) => put(f(s)));
  +  State<S, dynamic/*=A*/> gets/*<A>*/(/*=A*/ f(S s)) => new State((S s) => new Tuple2(f(s), s));
  +  State<S, Unit> put(S newS) => new State((_) => new Tuple2(unit, newS));
  +  State<S, Unit> modify(S f(S s)) => new State((S s) => new Tuple2(unit, f(s)));
   }
   
   final StateMonad StateM = new StateMonad();
  +StateMonad/*<S>*/ stateM/*<S>*/() => StateM as StateMonad/*<S>*/;
   
   class StateT<F, S, A> extends FunctorOps<StateT/*<F, S, dynamic>*/, A> with ApplicativeOps<StateT/*<F, S, dynamic>*/, A>, MonadOps<StateT/*<F, S, dynamic>*/, A> {
     final Monad<F> _FM;
  
positive.code:   F state(S s) => _FM.map(_run(s), (t) => t.value2);
  
    @override StateT/*<F, S, B>*/ pure/*<B>*/(/*=B*/ b) => new StateT(_FM, (S s) => _FM.pure(new Tuple2<B, S>(b, s)));
  
    @override StateT/*<F, S, B>*/ bind/*<B>*/(StateT/*<F, S, B>*/ f(A a)) => new StateT(_FM, (S s) => _FM.bind(_FM.pure(() => _run(s)), (F tt()) {
      return _FM.bind(tt(), (Tuple2<A, S> t) => f(t.value1)._run(t.value2));
    }));
  
negative.code: 
    StateTMonad(this._FM);
  
    @override StateT<F, S, dynamic/*=A*/> pure/*<A>*/(/*=A*/ a) =>  new StateT(_FM, (S s) => _FM.pure(new Tuple2(a, s)));
    @override StateT<F, S, dynamic/*=B*/> map/*<A, B>*/(StateT<F, S, dynamic/*=A*/> fa, /*=B*/ f(/*=A*/ a)) => fa.map(f);
    @override StateT<F, S, dynamic/*=B*/> bind/*<A, B>*/(StateT<F, S, dynamic/*=A*/> fa, StateT<F, S, dynamic/*=B*/> f(/*=A*/ a)) => fa.bind(f);
  
    StateT<F, S, S> get() => new StateT(_FM, (S s) => _FM.pure(new Tuple2(s, s)));
    StateT<F, S, dynamic/*=A*/> gets/*<A>*/(/*=A*/ f(S s)) => new StateT(_FM, (S s) => _FM.pure(new Tuple2(f(s), s)));
    StateT<F, S, Unit> put(S newS) => new StateT(_FM, (_) => _FM.pure(new Tuple2(unit, newS)));
    StateT<F, S, Unit> modify(S f(S s)) => new StateT(_FM, (S s) => _FM.pure(new Tuple2(unit, f(s))));
  }
  
  final StateTMonad<Trampoline, dynamic> TStateM = new StateTMonad(TrampolineM);
  