3.0.5 • Published 6 years ago

free-monoid v3.0.5

Weekly downloads
1
License
MIT
Repository
github
Last release
6 years ago

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-monoid

Usage

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 eval
8

List 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
true

Other derivatives from free-monoid

Timeline Monoid

https://www.npmjs.com/package/timeline-monoid

3.0.5

6 years ago

3.0.4

6 years ago

3.0.3

6 years ago

3.0.2

6 years ago

3.0.1

6 years ago

3.0.0

6 years ago

2.4.0

6 years ago

2.3.1

6 years ago

2.3.0

6 years ago

2.2.0

6 years ago

2.1.2

6 years ago

2.1.1

6 years ago

2.1.0

6 years ago

2.0.0

6 years ago

1.2.0

6 years ago

1.1.1

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.1

6 years ago