anchor.diff:    bool get isCold => _value != null;
   
     @override
  -  StreamSubscription onChange(f, {bool ignoreFirst}) {
  +  StreamSubscription<T> onChange(f, {bool ignoreFirst}) {
       return new Stream.empty().listen(f);
     }
   
     @override
  -  String toString() => 'Stream($_value)';
  +  String toString() => 'Signal($_value)';
   
     @override
     Stream<T> toStream() => new Stream.empty();
  
positive.code:   @override
    set value(T newValue) {
      if (newValue != null && newValue != _value) {
        _hasInitialized = true;
        _value = newValue;
        _controller.add(_value);
      }
    }
  
    @override
    bool get isHot => _hasInitialized == true;
  
    @override
    bool get isCold => _hasInitialized == false;
  
    @override
    StreamSubscription onChange(void f(T newValue), {bool ignoreFirst: false}) {
      if (_hasInitialized && !ignoreFirst) {
        f(_value);
      }
      return _controller.stream.listen(f);
  
negative.code:   ///
    /// [ignoreFirst] defaults to false and skips any initial updates, since
    /// they can be read from Signal#value.
    StreamSubscription<T> onChange(void f(T newValue), {bool ignoreFirst: false});
  
    /// Cleans up all interal streams and subscriptions.
    void dispose();
  