effect-ts-laws
Version:
effect-ts law testing using fast-check.
12 lines • 614 B
JavaScript
import { Law, lawTests } from '#law';
import { flow, pipe } from 'effect';
import { unfoldGiven } from './given.js';
/**
* Typeclass laws for `FlatMap`.
* @category typeclass laws
*/
export const flatMapLaws = (given, suffix) => {
const { F, fa, equalsFc, afb, bfc } = unfoldGiven(given);
return lawTests(`FlatMap${suffix ?? ''}`, Law('associativity', 'fa ▹ flatMap(afb) ▹ flatMap(bfc) = fa ▹ flatMap(flatMap(bfc) ∘ afb)', fa, afb, bfc)((fa, afb, bfc) => equalsFc(pipe(fa, F.flatMap(afb), F.flatMap(bfc)), pipe(fa, F.flatMap(flow(afb, F.flatMap(bfc)))))));
};
//# sourceMappingURL=FlatMap.js.map