@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
36 lines (35 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.pfind = void 0;
var type_system_1 = require("../../../type_system/index.js");
var bool_1 = require("../../builtins/bool/index.js");
var list_1 = require("../../builtins/list/index.js");
var papp_1 = require("../../papp.js");
var pfn_1 = require("../../pfn.js");
var phoist_1 = require("../../phoist.js");
var precursive_1 = require("../../precursive/index.js");
var PMaybe_1 = require("../PMaybe/PMaybe.js");
var toData_minimal_1 = require("../data/conversion/toData_minimal.js");
function pfind(elemsT) {
var PMaybeElem = (0, PMaybe_1.PMaybe)(elemsT);
return (0, phoist_1.phoist)((0, phoist_1.phoist)((0, pfn_1.pfn)([
(0, type_system_1.lam)(elemsT, (0, type_system_1.asData)(elemsT)),
(0, type_system_1.lam)(elemsT, type_system_1.bool)
], (0, type_system_1.lam)((0, type_system_1.list)(elemsT), PMaybeElem.type))(function (elemToData, predicate) {
return (0, precursive_1.precursive)((0, pfn_1.pfn)([
(0, type_system_1.lam)((0, type_system_1.list)(elemsT), PMaybeElem.type),
(0, type_system_1.list)(elemsT)
], PMaybeElem.type)(function (self, _list) {
return (0, bool_1.pif)(PMaybeElem.type).$(list_1.pisEmpty.$(_list))
.then(PMaybeElem.Nothing({}))
.else((0, bool_1.pif)(PMaybeElem.type).$((0, papp_1.papp)(predicate, _list.head))
.then(PMaybeElem.Just({
// "as any" because of
// "Type 'Term<PAsData<ToPType<ElemsT>>>' is not assignable to type 'Term<PAsData<ToPType<FromPType<PElemsT>>>>'"
val: (0, papp_1.papp)(elemToData, _list.head)
}))
.else((0, papp_1.papp)(self, (0, list_1.ptail)(elemsT).$(_list))));
}));
}, "make_pfind")).$((0, toData_minimal_1._ptoData)(elemsT)));
}
exports.pfind = pfind;