UNPKG

712 BJavaScriptView Raw
1"use strict";
2
3var assert = require("assert");
4
5/**
6 ### sum (n-ary either)
7
8 See: [Wikipedia](https://en.wikipedia.org/wiki/Tagged_union)
9*/
10
11function Addend(idx, len, value) {
12 assert(len > 0, "Addend: 0 < len"); // empty sum is void - cannot create such
13 assert(idx >= 0 && idx < len, "Addend: 0 <= idx < len");
14 this.idx = idx;
15 this.len = len;
16 this.value = value;
17}
18
19/**
20 - `sum.addend(idx: nat, n: nat, value: a): sum (... a ...)`
21*/
22function addend(idx, len, value) {
23 return new Addend(idx, len, value);
24}
25
26/**
27 - `.fold(f: (idx: nat, n: nat, value: a) -> b): b`
28*/
29Addend.prototype.fold = function (f) {
30 return f(this.idx, this.len, this.value);
31};
32
33module.exports = {
34 addend: addend,
35};