@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
62 lines (61 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.piterLists = void 0;
var types_1 = require("../../../../type_system/types.js");
var papp_1 = require("../../../papp.js");
var pdelay_1 = require("../../../pdelay.js");
var pfn_1 = require("../../../pfn.js");
var phoist_1 = require("../../../phoist.js");
var precursive_1 = require("../../../precursive/index.js");
var pmatchList_1 = require("../pmatchList/index.js");
function piterLists(fstListElems, sndListElems, resultT) {
var finalSelfType = (0, types_1.fn)([
(0, types_1.list)(fstListElems),
(0, types_1.list)(sndListElems)
], resultT);
var matchFstNil_t = (0, types_1.fn)([
finalSelfType,
(0, types_1.list)(sndListElems)
], resultT);
var matchSndNil_t = (0, types_1.fn)([
finalSelfType,
(0, types_1.list)(fstListElems)
], resultT);
var matchCons_t = (0, types_1.fn)([
finalSelfType,
fstListElems,
(0, types_1.list)(fstListElems),
sndListElems,
(0, types_1.list)(sndListElems)
], resultT);
return (0, phoist_1.phoist)((0, pfn_1.pfn)([
matchFstNil_t,
matchSndNil_t,
matchCons_t
], finalSelfType)(function (matchFstNil, matchSndNil, matchCons) {
return (0, precursive_1.precursive)((0, pfn_1.pfn)([
finalSelfType,
(0, types_1.list)(fstListElems),
(0, types_1.list)(sndListElems)
], resultT)(function (self, fstList, sndList) {
return (0, pmatchList_1.pmatchList)(resultT, fstListElems)
.$((0, pdelay_1.pdelay)((0, papp_1.papp)((0, papp_1.papp)(matchFstNil, self), sndList)))
.$((0, pfn_1.pfn)([
fstListElems,
(0, types_1.list)(fstListElems)
], resultT)(function (fstEl, restFst) {
return (0, pmatchList_1.pmatchList)(resultT, sndListElems)
.$((0, pdelay_1.pdelay)((0, papp_1.papp)((0, papp_1.papp)(matchSndNil, self), fstList)))
.$((0, pfn_1.pfn)([
sndListElems,
(0, types_1.list)(sndListElems)
], resultT)(function (sndEl, restSnd) {
return (0, papp_1.papp)((0, papp_1.papp)((0, papp_1.papp)((0, papp_1.papp)((0, papp_1.papp)(matchCons, self), fstEl), restFst), sndEl), restSnd);
}))
.$(sndList);
}))
.$(fstList);
}));
}, "piterLists"));
}
exports.piterLists = piterLists;