/** * @file Pattern stolen from fp-ts. Type defunctionalization (as describe in [Lightweight higher-kinded polymorphism](https://www.cl.cam.ac.uk/~jdy22/papers/lightweight-higher-kinded-polymorphism.pdf)) */ import type { ConfigType } from './config'; /** * `* -> * -> *` constructors * @since 0.0.1 */ export interface HKT { readonly _R: (_: R) => void; readonly _A: A; readonly _E: E; } /** * `* -> * -> *` constructors * @since 0.0.1 */ export interface URItoKind { readonly _R: (_: R) => void; readonly _A: A; readonly _E: E; readonly ['HKT']: HKT; } /** * `* -> * -> *` constructors * @since 0.0.1 */ export declare type URIS = Exclude, '_A' | '_E' | '_R'>; /** * `* -> * -> *` constructors * @since 0.0.1 */ export declare type URIS_ = Exclude; /** * `* -> * -> *` constructors * @since 0.0.1 */ export declare type Kind = URItoKind[URI]; /** * The URIS to Index ConfigType * @since 0.0.1 */ export declare type ConfigTypeURIS = keyof ConfigType; /** * Helper to resolve a ConfigType for a particular URI(s) * @since 0.0.1 */ export declare type ConfigTypeKind = ConfigType[URI];