/** * Type defunctionalization (as describe in [Lightweight higher-kinded polymorphism](https://www.cl.cam.ac.uk/~jdy22/papers/lightweight-higher-kinded-polymorphism.pdf)) * * @since 2.0.0 */ /** * `* -> *` constructors * @since 2.0.0 */ export interface HKT { readonly _URI: URI; readonly _A: A; } /** * `* -> * -> *` constructors * @since 2.0.0 */ export interface HKT2 extends HKT { readonly _E: E; } /** * `* -> * -> * -> *` constructors * @since 2.0.0 */ export interface HKT3 extends HKT2 { readonly _R: R; } /** * `* -> * -> * -> * -> *` constructors * @since 2.0.0 */ export interface HKT4 extends HKT3 { readonly _S: S; } /** * `* -> *` constructors * @since 2.0.0 */ export interface URItoKind { } /** * `* -> * -> *` constructors * @since 2.0.0 */ export interface URItoKind2 { } /** * `* -> * -> * -> *` constructors * @since 2.0.0 */ export interface URItoKind3 { } /** * `* -> * -> * -> * -> *` constructors * @since 2.0.0 */ export interface URItoKind4 { } /** * `* -> *` constructors * @since 2.0.0 */ export type URIS = keyof URItoKind; /** * `* -> * -> *` constructors * @since 2.0.0 */ export type URIS2 = keyof URItoKind2; /** * `* -> * -> * -> *` constructors * @since 2.0.0 */ export type URIS3 = keyof URItoKind3; /** * `* -> * -> * -> * -> *` constructors * @since 2.0.0 */ export type URIS4 = keyof URItoKind4; /** * `* -> *` constructors * @since 2.0.0 */ export type Kind = URI extends URIS ? URItoKind[URI] : any; /** * `* -> * -> *` constructors * @since 2.0.0 */ export type Kind2 = URI extends URIS2 ? URItoKind2[URI] : any; /** * `* -> * -> * -> *` constructors * @since 2.0.0 */ export type Kind3 = URI extends URIS3 ? URItoKind3[URI] : any; /** * `* -> * -> * -> * -> *` constructors * @since 2.0.0 */ export type Kind4 = URI extends URIS4 ? URItoKind4[URI] : any;