anchor.diff:  class Pipe {
     static final From _get = new From();
   
  -  static Conveyor<From/*<I>*/, dynamic/*=O*/> emit/*<I, O>*/(/*=O*/ h, [Conveyor/*<From<I>, O>*/ t]) =>
  -      Conveyor.emit(h, t);
  -
  -  static Conveyor<From/*<I>*/, dynamic/*=O*/> await/*<I, O>*/(Function1/*<I, Conveyor<From<I>, O>>*/ recv, [Function0/*<Conveyor<From<I>, O>>*/ fallback]) =>
  -      Conveyor.await(_get as dynamic/*=From<I>*/, (ea) => ea.fold((err) => err == Conveyor.End ? (fallback == null ? halt() : fallback()) : Conveyor.halt(err), (/*=I*/ i) => Conveyor.Try(() => recv(i))));
  +  static Conveyor<From/*<I>*/, dynamic/*=O*/> produce/*<I, O>*/(/*=O*/ h, [Conveyor/*<From<I>, O>*/ t]) =>
  +      Conveyor.produce(h, t);
  +
  +  static Conveyor<From/*<I>*/, dynamic/*=O*/> consume/*<I, O>*/(Function1/*<I, Conveyor<From<I>, O>>*/ recv, [Function0/*<Conveyor<From<I>, O>>*/ fallback]) =>
  +      Conveyor.consume(_get as dynamic/*=From<I>*/, (ea) => ea.fold((err) => err == Conveyor.End ? (fallback == null ? halt() : fallback()) : Conveyor.halt(err), (/*=I*/ i) => Conveyor.Try(() => recv(i))));
   
     static Conveyor<From/*<I>*/, dynamic/*=O*/> halt/*<I, O>*/() => Conveyor.halt(Conveyor.End);
   
  -  static Conveyor<From/*<I>*/, dynamic/*=O*/> lift/*<I, O>*/(Function1/*<I, O>*/ f) => await((/*=I*/ i) => emit(f(i))).repeat();
  -
  -  static Conveyor<From/*<I>*/, dynamic/*=I*/> take/*<I>*/(int n) => n <= 0 ? halt() : await((i) => emit(i, take/*<I>*/(n-1)));
  -
  -  static Conveyor<From/*<I>*/, dynamic/*=I*/> takeWhile/*<I>*/(bool f(/*=I*/ i)) => await((i) => f(i) ? emit(i, takeWhile/*<I>*/(f)) : halt());
  -
  -  static Conveyor<From/*<I>*/, dynamic/*=I*/> filter/*<I>*/(bool f(/*=I*/ i)) => await/*<I, I>*/((i) => f(i) ? emit(i) : halt()).repeat();
  +
  +  static Conveyor<From/*<I>*/, dynamic/*=O*/> lift/*<I, O>*/(Function1/*<I, O>*/ f) => consume((/*=I*/ i) => produce(f(i))).repeat();
  +
  +  static Conveyor<From/*<I>*/, dynamic/*=I*/> take/*<I>*/(int n) => n <= 0 ? halt() : consume((i) => produce(i, take/*<I>*/(n-1)));
  +
  +  static Conveyor<From/*<I>*/, dynamic/*=I*/> takeWhile/*<I>*/(bool f(/*=I*/ i)) => consume((i) => f(i) ? produce(i, takeWhile/*<I>*/(f)) : halt());
  +
  +  static Conveyor<From/*<I>*/, dynamic/*=I*/> filter/*<I>*/(bool f(/*=I*/ i)) => consume/*<I, I>*/((i) => f(i) ? produce(i) : halt()).repeat();
   
     static Conveyor<From/*<I>*/, dynamic/*=O*/> scan/*<I, O>*/(/*=O*/ z, Function2/*<O, I, O>*/ f) {
  -    Conveyor/*<From<I>, O>*/ go(/*=O*/ previous) => await((/*=I*/ i) {
  +    Conveyor/*<From<I>, O>*/ go(/*=O*/ previous) => consume((/*=I*/ i) {
         final current = f(previous, i);
  -      return emit(current, go(current));
  +      return produce(current, go(current));
       });
       return go(z);
     }
   }
   
  -final MonadPlus<Conveyor> ConveyorMP = new MonadPlusOpsMonadPlus<Conveyor>((a) => Conveyor.emit(a), () => Conveyor.halt(Conveyor.End));
  +final MonadPlus<Conveyor> ConveyorMP = new MonadPlusOpsMonadPlus<Conveyor>((a) => Conveyor.produce(a), () => Conveyor.halt(Conveyor.End));
   MonadPlus<Conveyor/*<F, O>*/> conveyorMP/*<F, O>*/() => ConveyorMP;
  
positive.code: 
  
    Conveyor<F, dynamic/*=O2*/> pipe/*<O2>*/(Conveyor<From<O>, dynamic/*=O2*/> p2) =>
        p2.interpret((h, t) => emit(h, pipe /*<O2>*/(t)),
            (req, recv) =>
                this.interpret((h, t) => t.pipe/*<O2>*/(Try(() => recv(right(h)))),
                    (req0, recv0) => await/*<F, O, O2>*/(req0, (ea) => recv0(ea).pipe /*<O2>*/(p2)),
                    (err) => halt/*<F, O2>*/(err)),
            (err) => kill/*<O2>*/().onHalt((err2) => halt/*<F, O2>*/(err).plus(halt(err2))));
  
  
negative.code: class Nowhere {}
  
  class Source {
    static Conveyor/*<F, A>*/ eval/*<F, A>*/(/*=F*/ fa) =>
        Conveyor.consume(fa, (ea) => ea.fold(Conveyor.halt, Conveyor.produce));
  
    static Conveyor/*<F, A>*/ eval_/*<F, A>*/(/*=F*/ fa) =>
        Conveyor.consume(fa, (ea) => ea.fold(Conveyor.halt, (_) => Conveyor.halt(Conveyor.End)));
  
    static Conveyor/*<F, O>*/ resource/*<F, R, O>*/(/*=F*/ acquire, Conveyor<dynamic/*=F*/, dynamic/*=O*/> use(/*=R*/ r), Conveyor<dynamic/*=F*/, dynamic/*=O*/> release(/*=R*/ r)) =>
        eval/*<F, R>*/(acquire).bind((r) => use(r).onComplete(() => release(r)));
  