/** * @since 0.24.0 */ import type { Kind, TypeLambda } from "effect/HKT" import type { Monoid } from "./Monoid.js" import * as monoid from "./Monoid.js" import type { Product } from "./Product.js" import type { SemiApplicative } from "./SemiApplicative.js" import * as semiApplicative from "./SemiApplicative.js" /** * @category type class * @since 0.24.0 */ export interface Applicative extends SemiApplicative, Product {} /** * Lift a `Monoid` into `F`, combining the inner values using the provided `Monoid`: * * - `combine` is provided by {@link semiApplicative.getSemigroup}. * - `empty` is `F.of(M.empty)` * * @since 0.24.0 */ export const getMonoid = (F: Applicative) => (M: Monoid): Monoid> => monoid.fromSemigroup( semiApplicative.getSemigroup(F)(M), F.of(M.empty) )