@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
38 lines (37 loc) • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports._pcompose = exports._plam = exports._papp = void 0;
var IRApp_1 = require("../../../../../IR/IRNodes/IRApp.js");
var IRFunc_1 = require("../../../../../IR/IRNodes/IRFunc.js");
var IRHoisted_1 = require("../../../../../IR/IRNodes/IRHoisted.js");
var IRVar_1 = require("../../../../../IR/IRNodes/IRVar.js");
var Term_1 = require("../../../../Term/index.js");
var type_system_1 = require("../../../../type_system/index.js");
function _papp(a, b) {
var outT = a.type[2];
if (outT === undefined) {
console.log(a.type);
}
return new Term_1.Term(outT, function (cfg, dbn) { return new IRApp_1.IRApp(a.toIR(cfg, dbn), b.toIR(cfg, dbn)); });
}
exports._papp = _papp;
function _plam(inputType, outputType) {
return function (termFunc) {
return new Term_1.Term((0, type_system_1.lam)(inputType, outputType), function (cfg, dbn) {
var thisLambdaPtr = dbn + BigInt(1);
var boundVar = new Term_1.Term(inputType, function (cfg, dbnAccessLevel) { return new IRVar_1.IRVar(dbnAccessLevel - thisLambdaPtr); });
var body = termFunc(boundVar);
// here the debruijn level is incremented
return new IRFunc_1.IRFunc(1, body.toIR(cfg, thisLambdaPtr));
});
};
}
exports._plam = _plam;
var _pcompose = function (a, b, c) {
return new Term_1.Term((0, type_system_1.fn)([
(0, type_system_1.lam)(b, c),
(0, type_system_1.lam)(a, b),
a
], c), function (_dbn) { return new IRHoisted_1.IRHoisted(new IRFunc_1.IRFunc(3, new IRApp_1.IRApp(new IRVar_1.IRVar(2), new IRApp_1.IRApp(new IRVar_1.IRVar(1), new IRVar_1.IRVar(0))))); });
};
exports._pcompose = _pcompose;