// Generated by purs version 0.14.5
"use strict";
var Data_Functor = require("../Data.Functor/index.js");
var invariantMultiplicative = {
    imap: function (f) {
        return function (v) {
            return function (v1) {
                return f(v1);
            };
        };
    }
};
var invariantEndo = {
    imap: function (ab) {
        return function (ba) {
            return function (v) {
                return function ($37) {
                    return ab(v(ba($37)));
                };
            };
        };
    }
};
var invariantDual = {
    imap: function (f) {
        return function (v) {
            return function (v1) {
                return f(v1);
            };
        };
    }
};
var invariantDisj = {
    imap: function (f) {
        return function (v) {
            return function (v1) {
                return f(v1);
            };
        };
    }
};
var invariantConj = {
    imap: function (f) {
        return function (v) {
            return function (v1) {
                return f(v1);
            };
        };
    }
};
var invariantAdditive = {
    imap: function (f) {
        return function (v) {
            return function (v1) {
                return f(v1);
            };
        };
    }
};
var imapF = function (dictFunctor) {
    return function (f) {
        return function (v) {
            return Data_Functor.map(dictFunctor)(f);
        };
    };
};
var invariantArray = {
    imap: imapF(Data_Functor.functorArray)
};
var invariantFn = {
    imap: imapF(Data_Functor.functorFn)
};
var imap = function (dict) {
    return dict.imap;
};
var invariantAlternate = function (dictInvariant) {
    return {
        imap: function (f) {
            return function (g) {
                return function (v) {
                    return imap(dictInvariant)(f)(g)(v);
                };
            };
        }
    };
};
module.exports = {
    imap: imap,
    imapF: imapF,
    invariantFn: invariantFn,
    invariantArray: invariantArray,
    invariantAdditive: invariantAdditive,
    invariantConj: invariantConj,
    invariantDisj: invariantDisj,
    invariantDual: invariantDual,
    invariantEndo: invariantEndo,
    invariantMultiplicative: invariantMultiplicative,
    invariantAlternate: invariantAlternate
};
