@typed/fp
Version:
Data Structures and Resources for fp-ts
265 lines (189 loc) • 4.58 kB
Markdown
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