import type { Monoid } from './Monoid' import type { MonoidalFunctor } from './MonoidalFunctor' import type { SemigroupKind } from './SemigroupKind' import * as HKT from './HKT' import { liftSemigroup } from './SemigroupKind' export interface MonoidKind extends SemigroupKind { readonly nat: HKT.Kind< F, C, HKT.Initial, HKT.Initial, HKT.Initial, HKT.Initial, HKT.Initial, HKT.Initial, HKT.Initial, HKT.Initial, HKT.Initial, A > } export function liftMonoid( F: MonoidalFunctor ): (M: Monoid) => MonoidKind { return (M: Monoid) => { const skfm = liftSemigroup(F)(M) return HKT.instance>({ ...skfm, nat: F.map_(F.unit(), () => M.nat) }) } }