src/0-core/0-base/Measure.js
/**
* Abstract Measure class.
*/
export class Measure {
/**
* Constructor, stores the monoid.
*/
constructor(monoid) {
this.monoid = monoid;
}
/**
* Returns the zero measure according to the monoid.
*/
zero() {
return this.monoid.zero();
}
/**
* Adds measures together using monoid#plus.
*/
plus(a, b, c = undefined) {
if (c === undefined) return this.monoid.plus(a, b);
return this.monoid.plus(a, this.monoid.plus(b, c));
}
/**
* Returns the measure of an element. Must be implemented by classes
* extending Measure
*/
measure(_element) {
throw new Error('measure : not implemented');
}
}