anchor.diff:  /// Changes to the value using `value=` are added to a broadcast stream. If the
   /// new value is equivalent to the current value, nothing's added to the stream.
   class ObservableReference<T> extends ChangeNotificationProvider<T>
  -    implements ObservableView<T>, ObserveAware<T>, Disposable {
  +    with ObservableViewMixin<T> {
     static bool _defaultEq(a, b) => a == b;
   
  +  final EqualsFn _equalsFn;
  +  StreamSubscription _listenSub;
     T _value;
  -  EqualsFn _equalsFn;
   
     /// Creates a listenable value holder, starting with the given value.
     /// Optionally takes custom equality function.
  
positive.code: 
  /// A read-only 'view' of something. Allows getting the current value and
  /// listening for values and changes.
  abstract class ObservableView<T> extends ChangeAware<T> {
    T get value;
  }
  
  /// A mutable object holder that allows listening on a stream of changes.
  
negative.code:     notifyChange(previous, value);
    }
  
    /// Listens to the given stream and sets the reference's value to whatever is
    /// emitted on the stream.
    ///
    /// Returns a [Future] that completes when the stream is done, analogous to
    /// `StreamController.addStream`.
    Future listen(Stream<T> stream) {
      _listenSub?.cancel();
      _listenSub = stream.listen((v) {
        value = v;
      });
      return _listenSub.asFuture();
    }
  
    @override
    void dispose() {
      super.dispose();
      _listenSub?.cancel();
      _value = null;
    }
  }
  