anchor.diff:  
   library clean_config;
   
  +/**
  + * Recursively merges Map [b] into [a].
  + *
  + * If there are under a specific key distinct values in [a] and [b] which
  + * are not Maps, the value in [b] is used.
  + */
   Map mergeMaps(Map a, Map b) {
     a = new Map.from(a);
     b = new Map.from(b);
  
positive.code:   }
    /**
     * Recursively converts [other] to [ConfigMap].
     */
    ConfigMap(other, {ConfigMap this.root: null}) {
      if (root == null) root = this;
      _data = _convert(other, (k,v) => v is Map ? new ConfigMap(v, root:root) : v);
    }
  
negative.code:   getValue(config) => _computation(config);
  }
  
  /**
   * Function used to access different parts of the ConfigMap.
   *
   * [computation] is given a ConfigMap in a structure it'd have when it's constructed.
   * Values in this ConfigMap can be accessed just like in a regular Map using operator [].
   */
  $(dynamic computation(ConfigMap config)) => new ComputedValue(computation);
  
  /**
   * ConfigMap may be used just as a regular Map, but in addition, parts of the ConfigMap
   * may be referenced even in construction of it using function [$]. Therefore, some duplications
   * may be removed.
   *
   * Example:
   *
   *    ConfigMap configMap = new ConfigMap(
   *      {
   *        "id" : "13",
   *        "user" : {
   *          "name" : "John",
   *          "surname" : "Doe",
   *          "fullname" : $((c) => '${c['user']['name']} ${c['user']['surname']}'),
   *          "hash" : $((c) => '${c['id']}${c['user']['fullname']}')
   *        }
   *      });
   *
   *    Map config = configMap.toMap();
   *    print(config['user']['fullname']); // "John Doe"
   */
  class ConfigMap {
    ConfigMap root;
    Map _data;
  