code: function base(name, predicate) {
    if (typeof name === 'function') {
      predicate = name;
      ({ name } = predicate);
    }
  
    /* istanbul ignore else */
    if (__DEV__) {
      assert(typeof name === 'string', `base()'s name must be string`);
      assert(
        typeof predicate === 'function',
        `base()'s predicate must be a function`
      );
    }
  
    const api = this;
  
    function Base(value, context) {
      if (Context.isRequired(context)) {
        return Context.with(value, Base, context, api);
      }
  
      return predicate(value)
        ? context.toValue(value, Base)
        : context.valueIsNotOfType(value, Base);
    }
  
    return decorate(Base, name, base, predicate);
  }
docs: /* ================================================================================
  The base combinator for defining basic domain knowledge
  ================================================================================