code: function option(name, type) {
    if (name[TYPICAL_TYPE]) {
      type = name;
      name = `${type.name}Option`;
    }
  
    /* istanbul ignore else */
    if (__DEV__) {
      assert(typeof name === 'string', `option()'s name must be a string`);
      assert(type[TYPICAL_TYPE], `option()'s type must be a type`);
    }
  
    const api = this;
  
    function Option(value, context) {
      if (Context.isRequired(context)) {
        return Context.with(value, Option, context, api);
      }
  
      return value == null ? context.toValue(value) : type(value, context);
    }
  
    return decorate(Option, name, option, type);
  }
docs: /* --------------------------------------------------------------------------------