sums-up
Version:
👍 Sums Up ===
52 lines (51 loc) • 1.34 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function arrayEquals(a, b) {
if (a === b)
return true;
if (a == null || b == null)
return false;
if (a.length != b.length)
return false;
for (var i = 0; i < a.length; ++i) {
if (a[i] !== b[i])
return false;
}
return true;
}
class SumType {
constructor(...args) {
let [variantName, ...data] = args;
this.variantName = variantName;
this.data = data;
}
// @deprecated
get kind() {
return this.variantName;
}
// Semi FSA compliancy
get type() {
return this.variantName;
}
caseOf(pattern) {
if (this.variantName in pattern) {
return pattern[this.variantName](...this.data);
}
else if (pattern._) {
return pattern._();
}
else {
throw new Error(`caseOf pattern is missing a function for ${this.variantName}`);
}
}
equals(that) {
return (this.variantName === that.variantName && arrayEquals(this.data, that.data));
}
toString() {
if (this.data.length) {
return `${this.variantName} ${JSON.stringify(this.data)}`;
}
return `${this.variantName}`;
}
}
exports.default = SumType;