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; } } interface List$$Semigroup$$Relaxer extends Fn<[List], List>> { def: ([xs]: Args) => List>; } interface List$$Semigroup$$Builder extends Fn<[List>], List$$Semigroup>> { def: ([xsCons]: Args) => List$$Semigroup<(typeof xsCons)[number]>; } /** * Implementation of the {@link Semigroup} type class for {@link List}. */ export interface List$$Semigroup extends TypeClass$$Semigroup> { Concat: List$$Semigroup$ConcatFn; } /** * [Fn] Concatenate two {@link List}s holding the same type. * * Sig: `(xs: List, ys: List) => List` */ interface List$$Semigroup$ConcatFn extends Fn<[List, List], List> { def: ([xs, ys]: Args) => Concat; }