"use strict";
/**
 * @since 2.11.0
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMonoid = exports.getSemigroup = exports.URI = void 0;
var function_1 = require("./function");
/**
 * @category type lambdas
 * @since 2.11.0
 */
exports.URI = 'Endomorphism';
/**
 * Endomorphism form a `Semigroup` where the `concat` operation is the usual function composition.
 *
 * @category instances
 * @since 2.11.0
 */
var getSemigroup = function () { return ({
    concat: function (first, second) { return (0, function_1.flow)(first, second); }
}); };
exports.getSemigroup = getSemigroup;
/**
 * Endomorphism form a `Monoid` where the `empty` value is the `identity` function.
 *
 * @category instances
 * @since 2.11.0
 */
var getMonoid = function () { return ({
    concat: (0, exports.getSemigroup)().concat,
    empty: function_1.identity
}); };
exports.getMonoid = getMonoid;