rivo
Version:
🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.
37 lines (31 loc) • 1.2 kB
TypeScript
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>;
}