import { HKT2, Kind2, URIS2 } from 'fp-ts/HKT' import { Literal } from 'io-ts/Schemable' // eslint-disable-next-line @typescript-eslint/no-explicit-any type Any = any type AofHKT2 = [X] extends [HKT2] ? A : never type EofHKT2 = [X] extends [HKT2] ? E : never type AofKind2 = [X] extends [Kind2] ? A : never type EofKind2 = [X] extends [Kind2] ? E : never type EnsureTagHKT2 = { [K in keyof M]: HKT2 } type EnsureTagKind2 = { [K in keyof M]: Kind2 } export interface SchemableHKT2 { readonly URI: S readonly literal: < A extends readonly [L, ...ReadonlyArray], L extends Literal = Literal >( ...values: A ) => HKT2 readonly string: HKT2 readonly number: HKT2 readonly boolean: HKT2 readonly nullable: (or: HKT2) => HKT2 readonly struct: >>( properties: Properties ) => HKT2< S, { [K in keyof Properties]: EofHKT2 }, { [K in keyof Properties]: AofHKT2 } > readonly partial: >>( properties: Properties ) => HKT2< S, Partial<{ [K in keyof Properties]: EofHKT2 }>, Partial<{ [K in keyof Properties]: AofHKT2 }> > readonly record: ( codomain: HKT2 ) => HKT2, Record> readonly array: (item: HKT2) => HKT2, Array> readonly tuple: >>( ...components: Components ) => HKT2< S, { [K in keyof Components]: EofHKT2 }, { [K in keyof Components]: AofHKT2 } > readonly intersect: ( right: HKT2 ) => (left: HKT2) => HKT2 readonly sum: ( tag: T ) => >>( members: EnsureTagHKT2 & Members ) => HKT2, AofHKT2> readonly lazy: (id: string, f: () => HKT2) => HKT2 readonly readonly: (soa: HKT2) => HKT2> } export interface Schemable2 { readonly URI: S readonly literal: < A extends readonly [L, ...ReadonlyArray], L extends Literal = Literal >( ...values: A ) => Kind2 readonly string: Kind2 readonly number: Kind2 readonly boolean: Kind2 readonly nullable: (or: Kind2) => Kind2 readonly struct: >>( properties: Properties ) => Kind2< S, { [K in keyof Properties]: EofKind2 }, { [K in keyof Properties]: AofKind2 } > readonly partial: >>( properties: Properties ) => Kind2< S, Partial<{ [K in keyof Properties]: EofKind2 }>, Partial<{ [K in keyof Properties]: AofKind2 }> > readonly record: ( codomain: Kind2 ) => Kind2, Record> readonly array: (item: Kind2) => Kind2, Array> readonly tuple: >>( ...components: Components ) => Kind2< S, { [K in keyof Components]: EofKind2 }, { [K in keyof Components]: AofKind2 } > readonly intersect: ( right: Kind2 ) => (left: Kind2) => Kind2 readonly sum: ( tag: T ) => >>( members: EnsureTagKind2 & Members ) => Kind2, AofKind2> readonly lazy: (id: string, f: () => Kind2) => Kind2 readonly readonly: (soa: Kind2) => Kind2> }