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)
})
}
}