import type { Monoid } from "@principia/prelude/Monoid";
import { pure } from "./applicative";
import type { IO } from "./model";
import { getSemigroup } from "./semigroup";
/*
* -------------------------------------------
* Monoid IO
* -------------------------------------------
*/
/**
* ```haskell
* getMonoid :: Monoid m => m a -> m (IO a)
* ```
*
* Lifts a `Monoid` into `IO`, the inner values are concatenated with the provided `Monoid`
*
* @category Instances
* @since 1.0.0
*/
export const getMonoid = (M: Monoid): Monoid> => ({
...getSemigroup(M),
nat: pure(M.nat)
});