// Generated by purs version 0.12.5
"use strict";
var Data_Generic_Rep = require("../Data.Generic.Rep/index.js");
var Data_Semigroup = require("../Data.Semigroup/index.js");
var GenericSemigroup = function (genericAppend$prime) {
    this["genericAppend'"] = genericAppend$prime;
};
var genericSemigroupNoConstructors = new GenericSemigroup(function (a) {
    return function (v) {
        return a;
    };
});
var genericSemigroupNoArguments = new GenericSemigroup(function (a) {
    return function (v) {
        return a;
    };
});
var genericSemigroupArgument = function (dictSemigroup) {
    return new GenericSemigroup(function (v) {
        return function (v1) {
            return Data_Semigroup.append(dictSemigroup)(v)(v1);
        };
    });
};
var genericAppend$prime = function (dict) {
    return dict["genericAppend'"];
};
var genericSemigroupConstructor = function (dictGenericSemigroup) {
    return new GenericSemigroup(function (v) {
        return function (v1) {
            return genericAppend$prime(dictGenericSemigroup)(v)(v1);
        };
    });
};
var genericSemigroupProduct = function (dictGenericSemigroup) {
    return function (dictGenericSemigroup1) {
        return new GenericSemigroup(function (v) {
            return function (v1) {
                return new Data_Generic_Rep.Product(genericAppend$prime(dictGenericSemigroup)(v.value0)(v1.value0), genericAppend$prime(dictGenericSemigroup1)(v.value1)(v1.value1));
            };
        });
    };
};
var genericAppend = function (dictGeneric) {
    return function (dictGenericSemigroup) {
        return function (x) {
            return function (y) {
                return Data_Generic_Rep.to(dictGeneric)(genericAppend$prime(dictGenericSemigroup)(Data_Generic_Rep.from(dictGeneric)(x))(Data_Generic_Rep.from(dictGeneric)(y)));
            };
        };
    };
};
module.exports = {
    GenericSemigroup: GenericSemigroup,
    "genericAppend'": genericAppend$prime,
    genericAppend: genericAppend,
    genericSemigroupNoConstructors: genericSemigroupNoConstructors,
    genericSemigroupNoArguments: genericSemigroupNoArguments,
    genericSemigroupProduct: genericSemigroupProduct,
    genericSemigroupConstructor: genericSemigroupConstructor,
    genericSemigroupArgument: genericSemigroupArgument
};
