anchor.diff:  
     StateTMonad(this._FM);
   
  -  @override StateT<F, S, dynamic> pure(a) =>  new StateT(_FM, (S s) => _FM.pure(new Tuple2<dynamic, S>(a, s)));
  +  @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);
   
  -  @override StateT<F, S, dynamic> bind(StateT<F, S, dynamic> fa, StateT<F, S, dynamic> f(_)) => fa.bind(f);
  -
  -  StateT<F, S, S> get() => new StateT(_FM, (S s) => _FM.pure(new Tuple2<S, S>(s, s)));
  -  StateT<F, S, Unit> put(S s) => new StateT(_FM, (_) => _FM.pure(new Tuple2<Unit, S>(unit, s)));
  -  StateT<F, S, Unit> modify(S f(S s)) => get().bind((S s) => put(f(s)));
  +  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);
  
positive.code:   State(this._run);
  
    @override State/*<S, B>*/ pure/*<B>*/(/*=B*/ b) => new State((s) => new Tuple2(b, s));
  
    @override State/*<S, B>*/ bind/*<B>*/(State/*<S, B>*/ f(A a)) => new State/*<S, B>*/((S s) {
      final ran = run(s);
      return f(ran.value1).run(ran.value2);
  
negative.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>*/ map/*<B>*/(/*=B*/ f(A a)) => new StateT(_FM, (S s) => _FM.map(_run(s), (Tuple2<A, S> t) => t.map1(f)));
    @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));
    }));
  