3.0.5 • Published 8 years ago
free-monoid v3.0.5
Free Monoid
npm package: https://www.npmjs.com/package/free-monoid
Free moniod in JavaScript
const M = freeMonoid(operator);Identity: (M)
(M)(a) = (a) = (a)(M)
Associative
((a)(b))(c) = (a)(b)(c) = (a)((b)(c))
Installation
$ npm install free-monoidUsage
const freeMonoid = require("free-monoid");Additive monoid derived from free-monoid
const _M = () => freeMonoid(operator);
const operator = list => {
list.eval = () => list.val.reduce((a, b) => (a + b));
};
const M = _M();
const x = (M)(1);
const y = (M)(2);
const z = (M)(5);
console.log(x);
console.log(
(M)(x) // === (x) left identity
);
console.log(
(x)(M) // === (x) right identity
);
const xyz = (x)(y)(z);
console.log(xyz);
console.log(xyz.eval()); //lazy eval8List monad derived from free-monoid
https://www.npmjs.com/package/list-monad
monad laws validation
const util = require("util");
const validate = a => b => util.inspect(a) === util.inspect(b)
? true : false;
const f = x => (M)(x + 7);
const g = x => (M)(x * 5);
const a = 9;
const m = (M)(3)(5)(7);
console.log(
validate(
(M)(a).bind(f)
)(
f(a)
)
);
console.log(
validate(
m.bind(M)
)(
m
)
);
console.log(
validate(
m.bind(f)
.bind(g)
)(
m.bind(x => f(x)
.bind(g))
)
);true
true
trueOther derivatives from free-monoid
Timeline Monoid
3.0.5
8 years ago
3.0.4
8 years ago
3.0.3
8 years ago
3.0.2
8 years ago
3.0.1
8 years ago
3.0.0
8 years ago
2.4.0
8 years ago
2.3.1
8 years ago
2.3.0
8 years ago
2.2.0
8 years ago
2.1.2
8 years ago
2.1.1
8 years ago
2.1.0
8 years ago
2.0.0
8 years ago
1.2.0
8 years ago
1.1.1
8 years ago
0.1.1
8 years ago
0.1.0
8 years ago
0.0.1
8 years ago