UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

265 lines (189 loc) 4.58 kB
--- title: HKT.ts nav_order: 31 parent: Modules --- ## HKT overview Added in v0.9.2 --- <h2 class="text-delta">Table of contents</h2> - [Type-level](#type-level) - [A (type alias)](#a-type-alias) - [ApplyVariance (type alias)](#applyvariance-type-alias) - [Contravariant (type alias)](#contravariant-type-alias) - [Covariant (type alias)](#covariant-type-alias) - [E (type alias)](#e-type-alias) - [Hkt (type alias)](#hkt-type-alias) - [Initial (type alias)](#initial-type-alias) - [Intersect (type alias)](#intersect-type-alias) - [Param (type alias)](#param-type-alias) - [R (type alias)](#r-type-alias) - [S (type alias)](#s-type-alias) - [URItoVariance (interface)](#uritovariance-interface) - [UriToLength (type alias)](#uritolength-type-alias) - [V (interface)](#v-interface) - [Variance (type alias)](#variance-type-alias) - [URI](#uri) - [FpTsUri (type alias)](#fptsuri-type-alias) --- # Type-level ## A (type alias) **Signature** ```ts export type A = 'A' ``` Added in v0.9.2 ## ApplyVariance (type alias) **Signature** ```ts export type ApplyVariance< F, P extends Param, T extends readonly any[], > = F extends keyof URItoVariance ? URItoVariance[F] extends V<P, infer R> ? R extends Covariant ? T[number] : Intersect<T> : T[0] : T[0] ``` Added in v0.9.2 ## Contravariant (type alias) **Signature** ```ts export type Contravariant = '-' ``` Added in v0.9.2 ## Covariant (type alias) **Signature** ```ts export type Covariant = '+' ``` Added in v0.9.2 ## E (type alias) **Signature** ```ts export type E = 'E' ``` Added in v0.9.2 ## Hkt (type alias) Universal type for using all of fp-ts' internal kinds. Initially intended for helping to create your own type-classes **Signature** ```ts export type Hkt<F, Params extends readonly any[]> = F extends H.URIS ? H.Kind<F, Params[0]> : F extends H.URIS2 ? H.Kind2<F, Params[0], Params[1]> : F extends H.URIS3 ? H.Kind3<F, Params[0], Params[1], Params[2]> : F extends H.URIS4 ? H.Kind4<F, Params[0], Params[1], Params[2], Params[3]> : Params['length'] extends 4 ? H.HKT4<F, Params[0], Params[1], Params[2], Params[3]> : Params['length'] extends 3 ? H.HKT3<F, Params[0], Params[1], Params[2]> : Params['length'] extends 2 ? H.HKT2<F, Params[0], Params[1]> : H.HKT<F, Params[0]> ``` Added in v0.9.2 ## Initial (type alias) **Signature** ```ts export type Initial<F, P extends Param> = F extends keyof URItoVariance ? URItoVariance[F] extends V<P, infer R> ? R extends Covariant ? never : unknown : any : any ``` Added in v0.9.2 ## Intersect (type alias) **Signature** ```ts export type Intersect<A extends readonly any[], R = unknown> = A extends readonly [ infer Head, ...infer Tail ] ? Intersect<Tail, R & Head> : R ``` Added in v0.9.2 ## Param (type alias) **Signature** ```ts export type Param = S | R | E | A ``` Added in v0.9.2 ## R (type alias) **Signature** ```ts export type R = 'R' ``` Added in v0.9.2 ## S (type alias) **Signature** ```ts export type S = 'S' ``` Added in v0.9.2 ## URItoVariance (interface) A type-level map meant be extended, just like URItoKind\*, to specify the variance that should apply. If none is specified the default is to be strict. **Signature** ```ts export interface URItoVariance { readonly Either: V<E, Covariant> readonly IOEither: V<E, Covariant> readonly Reader: V<E, Contravariant> readonly ReaderEither: V<R, Contravariant> & V<E, Covariant> readonly ReaderTask: V<E, Contravariant> readonly ReaderTaskEither: V<R, Contravariant> & V<E, Covariant> readonly StateReaderTaskEither: V<R, Contravariant> & V<E, Covariant> readonly TaskEither: V<E, Covariant> readonly TaskThese: V<E, Covariant> readonly These: V<E, Covariant> } ``` Added in v0.9.2 ## UriToLength (type alias) **Signature** ```ts export type UriToLength<F, Params extends readonly any[] = readonly any[]> = F extends H.URIS ? 1 : F extends H.URIS2 ? 2 : F extends H.URIS3 ? 3 : F extends H.URIS4 ? 4 : Params['length'] ``` Added in v0.9.2 ## V (interface) **Signature** ```ts export interface V<P extends Param, V extends Variance> { readonly Variance: { readonly [K in P]: () => V } } ``` Added in v0.9.2 ## Variance (type alias) **Signature** ```ts export type Variance = Covariant | Contravariant ``` Added in v0.9.2 # URI ## FpTsUri (type alias) Union of all the fp-ts URIs **Signature** ```ts export type FpTsUri = H.URIS | H.URIS2 | H.URIS3 | H.URIS4 ``` Added in v0.9.2