UNPKG

@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
"use strict"; 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;