code: function createReducer (source, options = {}) {
    if (isReducer(source)) {
      return source
    }
  
    source = normalizeInput(source)
    const reducerType = reducerTypes.find(r => r.isType(source))
  
    if (_.isUndefined(reducerType)) {
      const message = [
        'Invalid reducer type.',
        ' Could not find a matching reducer type while parsing the value:\n ',
        _.attempt(util.inspect, source),
        '\nTry using an Array, String, Object, or Function.\n',
        'More info: https://github.com/ViacomInc/data-point/tree/master/packages/data-point#reducers\n'
      ].join('')
  
      throw new Error(message)
    }
  
    // NOTE: recursive call
    const reducer = reducerType.create(createReducer, source)
    reducer[IS_REDUCER] = true
    if (_.has(options, 'default')) {
      reducer[DEFAULT_VALUE] = { value: options.default }
    }
  
    return Object.freeze(reducer)
  }
docs: parse reducer
  @param {*} source
  @param {Object} options
  @throws if source is not a valid type for creating a reducer
  @return {reducer}