anchor.diff:  
   /// [MapDecoder] reads serialized values from a [Map] encoded from an
   /// [MapValue] where entries are stored using [String] values as keys.
  -class MapDecoder extends AbstractDecoder<String> {
  +class MapDecoder extends AbstractDecoder<String, String> {
     /// Creates an [MapDecoder] that decodes [map] into deserialized values
     /// using [deserializer] to create canonicalized values.
     MapDecoder(Deserializer deserializer, Map<String, dynamic> map)
         : super(deserializer, map);
   
     @override
  -  _getKeyValue(String key) => key;
  +  String _getKeyValue(String key) => key;
   
     /// Applies [f] to every key in the decoded [Map].
     void forEachKey(f(String key)) {
  
positive.code: }
  
  /// Abstract base implementation for [ObjectDecoder] and [MapDecoder].
  abstract class AbstractDecoder<K> {
    final Deserializer _deserializer;
    final Map<K, dynamic> _map;
  
    AbstractDecoder(this._deserializer, this._map) {
      assert(_deserializer != null);
  
negative.code: 
  /// [ObjectDecoder] reads serialized values from a [Map] encoded from an
  /// [ObjectValue] where properties are stored using [Key] values as keys.
  class ObjectDecoder extends AbstractDecoder<dynamic, Key> {
    /// Creates an [ObjectDecoder] that decodes [map] into deserialized values
    /// using [deserializer] to create canonicalized values.
    ObjectDecoder(Deserializer deserializer, Map map) : super(deserializer, map);
  