code: function merge(a, b) {
    if (type(a) !== type(b)) {
      throw new Error('Incompatible merge scenario.');
    } else if ('object' === type(a)) {
      return mergeObject(a, b);
    } else if ('array' === type(a)) {
      return mergeArray(a, b);
    } else {
      throw new Error('Unsupported merge scenario');
    }
  }
docs: /*!
  Start merge scenario by detecting if capable
  and proxying to the appropriate sub-function.
  
  @param {Array|Object} destination
  @param {Array|ObjectArray|Object} source
  @return {Array|Object} destination merged
  @api private