UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

37 lines (31 loc) • 1.2 kB
import type { List } from "."; import type { Concat } from "./Concat"; import type { Args, Cons, Fn } from "../HKT"; import type { Broaden } from "../helpers"; import type { Semigroup, TypeClass$$Semigroup } from "../typeclass"; declare module "../typeclass/Semigroup" { interface SemigroupImpl { List: ImplSemigroupForGeneric<List, List$$Semigroup$$Relaxer, List$$Semigroup$$Builder>; } } interface List$$Semigroup$$Relaxer extends Fn<[List<unknown>], List<Cons<unknown>>> { def: ([xs]: Args<this>) => List<Broaden<(typeof xs)[number]>>; } interface List$$Semigroup$$Builder extends Fn<[List<Cons<unknown>>], List$$Semigroup<Cons<unknown>>> { def: ([xsCons]: Args<this>) => List$$Semigroup<(typeof xsCons)[number]>; } /** * Implementation of the {@link Semigroup} type class for {@link List}. */ export interface List$$Semigroup<T> extends TypeClass$$Semigroup<List<T>> { Concat: List$$Semigroup$ConcatFn<T>; } /** * [Fn] Concatenate two {@link List}s holding the same type. * * Sig: `<T>(xs: List<T>, ys: List<T>) => List<T>` */ interface List$$Semigroup$ConcatFn<T> extends Fn<[List<T>, List<T>], List<T>> { def: ([xs, ys]: Args<this>) => Concat<typeof xs, typeof ys>; }