anchor.diff:    }
   
     Future run() async {
  +    await setUp();
  +    await _runCycle();
  +    await tearDown();
  +  }
  +
  +  Future _runCycle() async {
       try {
         await waitForInput();
       } on InputException catch(e) {
  
positive.code:   Program() {
      this._io = new ConsoleIoDevice();
      this._shell = new Shell();
      _init();
    }
  
    Program.using(IoDevice this._io, Shell this._shell) {
      _init();
    }
  
    void _init() {
      reflectClass(this.runtimeType).declarations.forEach((k, v) {
        if (v.metadata.any((m) => m.reflectee is Command)) {
          addCommand(reflect(this).getField(k).reflectee);
        }
      });
    }
  
    ask(Question question) {
  
negative.code:     } on ProgramExitingException {
        return;
      }
      await _runCycle();
    }
  
    void exit() {
  