anchor.diff:      } on ProgramExitingException {
         return;
       }
  -    await run();
  +    await _runCycle();
     }
   
     void exit() {
  
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:   }
  
    Future run() async {
      await setUp();
      await _runCycle();
      await tearDown();
    }
  
    Future _runCycle() async {
      try {
        await waitForInput();
      } on InputException catch(e) {
  