UNPKG

ambjs

Version:

amb(iguous) operator in javascript

38 lines 1.63 kB
var expr$642 = require('./expression'), trampoline$643 = require('./trampoline'); var ambSet$644 = function (values$649) { return expr$642(function (succ$650, fail$651, ff$652) { return trampoline$643(function () { var next$653 = function (j$654) { var t$655 = ff$652 === undefined, l$656 = j$654 < values$649.length; return t$655 && l$656 || l$656 && j$654 < ff$652 ? succ$650(values$649[j$654], function () { return next$653(j$654 + 1); }, t$655 ? undefined : ff$652 - 1) : fail$651(); }; return values$649 === undefined ? fail$651() : next$653(0); }); }); }; var EndObject$645 = function () { }; EndObject$645.prototype.toString = function () { return '#end_object'; }; var end_object$646 = new EndObject$645(); var ambGenerator$647 = function (gen$657) { return expr$642(function (succ$658, fail$659, ff$660) { return trampoline$643(function () { var next$661 = function (j$662) { var val$663 = gen$657(), t$664 = ff$660 === undefined, l$665 = !(val$663 instanceof EndObject$645); return t$664 && l$665 || l$665 && j$662 < ff$660 ? succ$658(val$663, function () { return next$661(j$662 + 1); }, t$664 ? undefined : ff$660 - 1) : fail$659(); }; return next$661(0); }); }); }; var amb$648 = function (args$666) { return args$666 instanceof Function ? ambGenerator$647(args$666) : ambSet$644(args$666); }; amb$648.end_object = end_object$646; module.exports = amb$648;