anchor.diff:      return speech;
     }
   
  -  Voice voice({String name: ''}) => new Voice(name, this);
  +  Voice voice({String name}) => new Voice(name, this);
   
     Stream<Speech> get _onAddSpeech => _dialog.stream;
   }
  
positive.code:   final String _markup;
    final _uses = new StreamController.broadcast(sync: true);
  
    final _hasUses = new SettableScope.entered();
    ScopeAsValue _available;
  
    Scope<StateChangeEvent<bool>> get availability => _available.asScope;
  
negative.code: 
    UseReplyEvent(this.reply);
  }
  
  // A simple scope that is entered until incremented a maximum number of times.
  class _CountScope extends Scope<int> {
    final int max;
  
    var _current = 0;
    int get current => _current;
  
    final SettableScope<int> _scope;
  
    bool get isEntered => _scope.isEntered;
    Stream<int> get onEnter => _scope.onEnter;
    Stream<int> get onExit => _scope.onExit;
  
    _CountScope(int max)
        : this.max = max,
          _scope = max > 0
              ? new SettableScope<int>.entered()
              : new SettableScope<int>.notEntered();
  
    void increment() {
      if (_current == max) {
        throw new StateError("Max of $max already met, cannot increment.");
      }
  
      _current++;
  
      if (_current == max) {
        _scope.exit(_current);
        _scope.close();
      }
    }
  }
  