// Generated by purs version 0.14.5
"use strict";
var Data_Eq = require("../Data.Eq/index.js");
var Data_Ord = require("../Data.Ord/index.js");
var Data_Semiring = require("../Data.Semiring/index.js");
var Data_Show = require("../Data.Show/index.js");
var Multiplicative = function (x) {
    return x;
};
var showMultiplicative = function (dictShow) {
    return {
        show: function (v) {
            return "(Multiplicative " + (Data_Show.show(dictShow)(v) + ")");
        }
    };
};
var semigroupMultiplicative = function (dictSemiring) {
    return {
        append: function (v) {
            return function (v1) {
                return Data_Semiring.mul(dictSemiring)(v)(v1);
            };
        }
    };
};
var ordMultiplicative = function (dictOrd) {
    return dictOrd;
};
var monoidMultiplicative = function (dictSemiring) {
    return {
        mempty: Data_Semiring.one(dictSemiring),
        Semigroup0: function () {
            return semigroupMultiplicative(dictSemiring);
        }
    };
};
var functorMultiplicative = {
    map: function (f) {
        return function (m) {
            return f(m);
        };
    }
};
var eqMultiplicative = function (dictEq) {
    return dictEq;
};
var eq1Multiplicative = {
    eq1: function (dictEq) {
        return Data_Eq.eq(eqMultiplicative(dictEq));
    }
};
var ord1Multiplicative = {
    compare1: function (dictOrd) {
        return Data_Ord.compare(ordMultiplicative(dictOrd));
    },
    Eq10: function () {
        return eq1Multiplicative;
    }
};
var boundedMultiplicative = function (dictBounded) {
    return dictBounded;
};
var applyMultiplicative = {
    apply: function (v) {
        return function (v1) {
            return v(v1);
        };
    },
    Functor0: function () {
        return functorMultiplicative;
    }
};
var bindMultiplicative = {
    bind: function (v) {
        return function (f) {
            return f(v);
        };
    },
    Apply0: function () {
        return applyMultiplicative;
    }
};
var applicativeMultiplicative = {
    pure: Multiplicative,
    Apply0: function () {
        return applyMultiplicative;
    }
};
var monadMultiplicative = {
    Applicative0: function () {
        return applicativeMultiplicative;
    },
    Bind1: function () {
        return bindMultiplicative;
    }
};
module.exports = {
    Multiplicative: Multiplicative,
    eqMultiplicative: eqMultiplicative,
    eq1Multiplicative: eq1Multiplicative,
    ordMultiplicative: ordMultiplicative,
    ord1Multiplicative: ord1Multiplicative,
    boundedMultiplicative: boundedMultiplicative,
    showMultiplicative: showMultiplicative,
    functorMultiplicative: functorMultiplicative,
    applyMultiplicative: applyMultiplicative,
    applicativeMultiplicative: applicativeMultiplicative,
    bindMultiplicative: bindMultiplicative,
    monadMultiplicative: monadMultiplicative,
    semigroupMultiplicative: semigroupMultiplicative,
    monoidMultiplicative: monoidMultiplicative
};
