// ets_tracing: off import type { AccessCustom, CustomType } from "./custom.js" import type { URI } from "./kind.js" export interface HKT { F: F A: A } export interface HKT2 { F: F E: E A: A } export interface HKT3 { F: F R: R E: E A: A } export interface HKT4 { F: F S: S R: R E: E A: A } export type UHKT = [URI<"HKT1", CustomType<"F", F>>] export type UHKT2 = [URI<"HKT2", CustomType<"F", F>>] export type UHKT3 = [URI<"HKT3", CustomType<"F", F>>] export type UHKT4 = [URI<"HKT4", CustomType<"F", F>>] export type UHKTCategory = [URI<"HKTCategory", CustomType<"F", F>>] export interface URItoKind< // encodes metadata carried at the URI level (like additional params) FC, // encodes constraints on parameters and variance at the typeclass level TC, // encodes generic keys K, // encodes free logic Q, // encodes free logic W, // encodes free logic X, // encodes free logic (input in FX) I, // encodes free logic (state in FX) S, // encodes free logic (environment in FX) R, // encodes free logic (error in FX) E, // encodes output A > { ["HKT1"]: HKT, A> ["HKT2"]: HKT2, E, A> ["HKTCategory"]: HKT2, I, A> ["HKT3"]: HKT3, R, E, A> ["HKT4"]: HKT4, S, R, E, A> } export interface URItoIndex {} export type ConcreteURIS = keyof URItoKind< any, any, any, any, any, any, any, any, any, any, any >