"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTraversableComposition = exports.sequence = exports.traverse = void 0; var Foldable_1 = require("./Foldable"); var function_1 = require("./function"); var Functor_1 = require("./Functor"); function traverse(T, G) { return function (F) { var traverseT = T.traverse(F); var traverseG = G.traverse(F); return function (f) { return function (fga) { return traverseT(fga, function (ga) { return traverseG(ga, f); }); }; }; }; } exports.traverse = traverse; function sequence(T, G) { return function (F) { var sequenceT = T.sequence(F); var sequenceG = G.sequence(F); return function (fgha) { return sequenceT(T.map(fgha, sequenceG)); }; }; } exports.sequence = sequence; /** @deprecated */ function getTraversableComposition(F, G) { var map = (0, Functor_1.getFunctorComposition)(F, G).map; var FC = (0, Foldable_1.getFoldableComposition)(F, G); var _traverse = traverse(F, G); var _sequence = sequence(F, G); return { map: map, reduce: FC.reduce, foldMap: FC.foldMap, reduceRight: FC.reduceRight, traverse: function (H) { var traverseH = _traverse(H); return function (fga, f) { return (0, function_1.pipe)(fga, traverseH(f)); }; }, sequence: function (H) { var sequenceH = _sequence(H); return function (fgha) { return (0, function_1.pipe)(fgha, sequenceH); }; } }; } exports.getTraversableComposition = getTraversableComposition;