code: function decorate(type, name, combinator, ...terms) {
    /* istanbul ignore else */
    if (__DEV__) terms = freeze(terms);
  
    defineProperties(type, {
      [TYPICAL_TYPE]: { configurable, enumerable, value: true },
      name: { configurable, value: name },
      kind: { configurable, value: combinator.name },
      is: { configurable, value: v => type(v, { asPredicate: true }) },
      combinator: { configurable, value: combinator },
      terms: { configurable, value: terms },
      toString: {
        configurable,
        value() {
          return `[typical-${combinator.name}-type ${this.name}]`;
        },
      },
    });
  
    return type;
  }
docs: /* ================================================================================
  Decorate an executable type with common properties
  ================================================================================