Hyperlinkv0.8.0-beta.28

HKT

HKT.TypeClassinterfaceeffect/HKT.ts:94
TypeClass<F>

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>
}
models
Source effect/HKT.ts:943 lines
export interface TypeClass<F extends TypeLambda> {
  readonly [URI]?: F
}