	}

	unit: UnitTypeParser<$> = value => this.units([value]) as never

	valueOf: ValueOfTypeParser<$> = tsEnum =>
		this.units(enumValues(tsEnum)) as never

	enumerated: EnumeratedTypeParser<$> = (...values) =>
		this.units(values) as never

	instanceOf: InstanceOfTypeParser<$> = ctor =>
		this.node("proto", { proto: ctor }, { prereduced: true }) as never

	or: NaryUnionParser<$> = (...defs: unknown[]) =>
		this.schema(defs.map(def => this.parse(def))) as never

	and: NaryIntersectionParser<$> = (...defs: unknown[]) =>
		defs.reduce<BaseRoot>(
			(node, def) => node.and(this.parse(def)),
			this.intrinsic.unknown
		) as never

	merge: NaryMergeParser<$> = (...defs: unknown[]) =>
		defs.reduce<BaseRoot>(
			(node, def) => node.merge(this.parse(def)),
			this.intrinsic.object
