Package: effect
Module: HKT
Base interface for type classes that work with Higher-Kinded Types.
When to use
Use to define type class interfaces parameterized by a TypeLambda.
Details
A TypeClass defines operations that can be performed on any type constructor
that matches the given TypeLambda. This enables writing generic code that
works across different container types like Array, Option, Effect, etc.
Example (Defining higher-kinded type classes)
import type { HKT } from "effect"
// Define a Functor type class
interface Functor<F extends HKT.TypeLambda> extends HKT.TypeClass<F> {
map<A, B>(
fa: HKT.Kind<F, never, never, never, A>,
f: (a: A) => B
): HKT.Kind<F, never, never, never, B>
}
// Define a Monad type class
interface Monad<F extends HKT.TypeLambda> extends Functor<F> {
flatMap<A, B>(
fa: HKT.Kind<F, never, never, never, A>,
f: (a: A) => HKT.Kind<F, never, never, never, B>
): HKT.Kind<F, never, never, never, B>
}
Signature
export interface TypeClass<F extends TypeLambda> {
readonly [URI]?: F
}
Since v2.0.0