kojima/tests/units/monad.js
2025-03-26 21:28:33 -05:00

33 lines
704 B
JavaScript

import { it, assertEq } from 'folktest'
import { Monad } from '../../src/monad.js'
const leftIdentity = (M, a, f) => {
assertEq(M(a).bind(f), f(a))
}
const rightIdentity = (M, m) => {
assertEq(m.bind(M), m)
}
const associativity = (m, f, g) => {
assertEq(m.bind(f).bind(g), m.bind(x => f(x).bind(g)))
}
export const prove = (M, m, a, f, g) => {
leftIdentity(M, a, f)
rightIdentity(M, m)
associativity(m, f, g)
}
export const Tests = [
it('should adhere to monadic laws', () => {
const ctr = Monad.bind(undefined, Monad)
prove(
ctr,
ctr(1),
1,
x => ctr(x + 1),
x => ctr(x * 2)
)
})
]