// Generated by purs version 0.14.5
"use strict";
var Data_Eq = require("../Data.Eq/index.js");
var Data_HeytingAlgebra = require("../Data.HeytingAlgebra/index.js");
var Data_Ord = require("../Data.Ord/index.js");
var Data_Show = require("../Data.Show/index.js");
var Conj = function (x) {
    return x;
};
var showConj = function (dictShow) {
    return {
        show: function (v) {
            return "(Conj " + (Data_Show.show(dictShow)(v) + ")");
        }
    };
};
var semiringConj = function (dictHeytingAlgebra) {
    return {
        zero: Data_HeytingAlgebra.tt(dictHeytingAlgebra),
        one: Data_HeytingAlgebra.ff(dictHeytingAlgebra),
        add: function (v) {
            return function (v1) {
                return Data_HeytingAlgebra.conj(dictHeytingAlgebra)(v)(v1);
            };
        },
        mul: function (v) {
            return function (v1) {
                return Data_HeytingAlgebra.disj(dictHeytingAlgebra)(v)(v1);
            };
        }
    };
};
var semigroupConj = function (dictHeytingAlgebra) {
    return {
        append: function (v) {
            return function (v1) {
                return Data_HeytingAlgebra.conj(dictHeytingAlgebra)(v)(v1);
            };
        }
    };
};
var ordConj = function (dictOrd) {
    return dictOrd;
};
var monoidConj = function (dictHeytingAlgebra) {
    return {
        mempty: Data_HeytingAlgebra.tt(dictHeytingAlgebra),
        Semigroup0: function () {
            return semigroupConj(dictHeytingAlgebra);
        }
    };
};
var functorConj = {
    map: function (f) {
        return function (m) {
            return f(m);
        };
    }
};
var eqConj = function (dictEq) {
    return dictEq;
};
var eq1Conj = {
    eq1: function (dictEq) {
        return Data_Eq.eq(eqConj(dictEq));
    }
};
var ord1Conj = {
    compare1: function (dictOrd) {
        return Data_Ord.compare(ordConj(dictOrd));
    },
    Eq10: function () {
        return eq1Conj;
    }
};
var boundedConj = function (dictBounded) {
    return dictBounded;
};
var applyConj = {
    apply: function (v) {
        return function (v1) {
            return v(v1);
        };
    },
    Functor0: function () {
        return functorConj;
    }
};
var bindConj = {
    bind: function (v) {
        return function (f) {
            return f(v);
        };
    },
    Apply0: function () {
        return applyConj;
    }
};
var applicativeConj = {
    pure: Conj,
    Apply0: function () {
        return applyConj;
    }
};
var monadConj = {
    Applicative0: function () {
        return applicativeConj;
    },
    Bind1: function () {
        return bindConj;
    }
};
module.exports = {
    Conj: Conj,
    eqConj: eqConj,
    eq1Conj: eq1Conj,
    ordConj: ordConj,
    ord1Conj: ord1Conj,
    boundedConj: boundedConj,
    showConj: showConj,
    functorConj: functorConj,
    applyConj: applyConj,
    applicativeConj: applicativeConj,
    bindConj: bindConj,
    monadConj: monadConj,
    semigroupConj: semigroupConj,
    monoidConj: monoidConj,
    semiringConj: semiringConj
};
