// Generated by purs version 0.14.5
"use strict";
var Control_Category = require("../Control.Category/index.js");
var Control_Semigroupoid = require("../Control.Semigroupoid/index.js");
var Data_Profunctor = require("../Data.Profunctor/index.js");
var Data_Show = require("../Data.Show/index.js");
var Join = function (x) {
    return x;
};
var showJoin = function (dictShow) {
    return {
        show: function (v) {
            return "(Join " + (Data_Show.show(dictShow)(v) + ")");
        }
    };
};
var semigroupJoin = function (dictSemigroupoid) {
    return {
        append: function (v) {
            return function (v1) {
                return Control_Semigroupoid.compose(dictSemigroupoid)(v)(v1);
            };
        }
    };
};
var ordJoin = function (dictOrd) {
    return dictOrd;
};
var newtypeJoin = {
    Coercible0: function () {
        return undefined;
    }
};
var monoidJoin = function (dictCategory) {
    return {
        mempty: Control_Category.identity(dictCategory),
        Semigroup0: function () {
            return semigroupJoin(dictCategory.Semigroupoid0());
        }
    };
};
var invariantJoin = function (dictProfunctor) {
    return {
        imap: function (f) {
            return function (g) {
                return function (v) {
                    return Data_Profunctor.dimap(dictProfunctor)(g)(f)(v);
                };
            };
        }
    };
};
var eqJoin = function (dictEq) {
    return dictEq;
};
module.exports = {
    Join: Join,
    newtypeJoin: newtypeJoin,
    eqJoin: eqJoin,
    ordJoin: ordJoin,
    showJoin: showJoin,
    semigroupJoin: semigroupJoin,
    monoidJoin: monoidJoin,
    invariantJoin: invariantJoin
};
