@jsoldi/hkt
Version:
Higher kinded types for typescript and a few utility monads.
31 lines • 1.12 kB
JavaScript
import { monadPlus } from "../classes/monadPlus.js";
/** The set module, providing a set of functions for working with sets. */
export const set = (() => {
const union = (fa) => (fb) => fa.union(fb);
const intersection = (fa) => (fb) => fa.intersection(fb);
const difference = (fa) => (fb) => fa.difference(fb);
const symmetricDifference = (fa) => (fb) => fa.symmetricDifference(fb);
const isSubsetOf = (fa) => (fb) => fa.isSubsetOf(fb);
const isSupersetOf = (fa) => (fb) => fa.isSupersetOf(fb);
const isDisjointFrom = (fa) => (fb) => fa.isDisjointFrom(fb);
const unit = (a) => new Set([a]);
const bind = (fa, f) => new Set([...fa].flatMap(a => [...f(a)]));
const map = (fa, f) => new Set([...fa].map(f));
return {
...monadPlus({
unit,
bind,
map,
empty: () => new Set(),
append: (fa, fb) => fa.union(fb),
}),
union,
intersection,
difference,
symmetricDifference,
isSubsetOf,
isSupersetOf,
isDisjointFrom
};
})();
//# sourceMappingURL=set.js.map