"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.and = exports.or = exports.not = exports.Contravariant = exports.getMonoidAll = exports.getSemigroupAll = exports.getMonoidAny = exports.getSemigroupAny = exports.URI = exports.contramap = void 0; var function_1 = require("./function"); var contramap_ = function (predicate, f) { return (0, function_1.pipe)(predicate, (0, exports.contramap)(f)); }; /** * @since 2.11.0 */ var contramap = function (f) { return function (predicate) { return (0, function_1.flow)(f, predicate); }; }; exports.contramap = contramap; /** * @category type lambdas * @since 2.11.0 */ exports.URI = 'Predicate'; /** * @category instances * @since 2.11.0 */ var getSemigroupAny = function () { return ({ concat: function (first, second) { return (0, function_1.pipe)(first, (0, exports.or)(second)); } }); }; exports.getSemigroupAny = getSemigroupAny; /** * @category instances * @since 2.11.0 */ var getMonoidAny = function () { return ({ concat: (0, exports.getSemigroupAny)().concat, empty: function_1.constFalse }); }; exports.getMonoidAny = getMonoidAny; /** * @category instances * @since 2.11.0 */ var getSemigroupAll = function () { return ({ concat: function (first, second) { return (0, function_1.pipe)(first, (0, exports.and)(second)); } }); }; exports.getSemigroupAll = getSemigroupAll; /** * @category instances * @since 2.11.0 */ var getMonoidAll = function () { return ({ concat: (0, exports.getSemigroupAll)().concat, empty: function_1.constTrue }); }; exports.getMonoidAll = getMonoidAll; /** * @category instances * @since 2.11.0 */ exports.Contravariant = { URI: exports.URI, contramap: contramap_ }; // ------------------------------------------------------------------------------------- // utils // ------------------------------------------------------------------------------------- /** * @since 2.11.0 */ var not = function (predicate) { return function (a) { return !predicate(a); }; }; exports.not = not; /** * @since 2.11.0 */ var or = function (second) { return function (first) { return function (a) { return first(a) || second(a); }; }; }; exports.or = or; /** * @since 2.11.0 */ var and = function (second) { return function (first) { return function (a) { return first(a) && second(a); }; }; }; exports.and = and;