(ord: Order.Order<A>, eq_?: Equivalence.Equivalence<A>)
| 616 | } |
| 617 | |
| 618 | function make_<A>(ord: Order.Order<A>, eq_?: Equivalence.Equivalence<A>) { |
| 619 | const eq = eq_ ?? ((x, y) => ord(x, y) === 0) |
| 620 | |
| 621 | const fromArray_ = fromArray(eq) |
| 622 | const concat_ = (set: Set<A>, it: Iterable<A>) => fromArray_([...set, ...it]) |
| 623 | const insert__ = insert(eq) |
| 624 | |
| 625 | function replace_(set: Set<A>, a: A) { |
| 626 | return pipe(filter_(set, (x) => !eq(x, a)), insert__(a)) |
| 627 | } |
| 628 | |
| 629 | return { |
| 630 | insert: insert__, |
| 631 | insert_: insert_(eq), |
| 632 | remove: remove(eq), |
| 633 | remove_: remove_(eq), |
| 634 | reduce: reduce(ord), |
| 635 | reduce_: reduce_(ord), |
| 636 | replace: (a: A) => (set: Set<A>) => replace_(set, a), |
| 637 | replace_, |
| 638 | toArray: toArray(ord), |
| 639 | fromArray, |
| 640 | from: (it: Iterable<A>) => fromArray_([...it]), |
| 641 | empty: () => new Set<A>(), |
| 642 | concat_, |
| 643 | concat: (it: Iterable<A>) => (set: Set<A>) => concat_(set, it), |
| 644 | |
| 645 | // A and B the same, useful when editing elements. |
| 646 | map: map(eq), |
| 647 | map_: map_(eq), |
| 648 | filterMap: filterMap(eq), |
| 649 | filterMap_: filterMap_(eq) |
| 650 | } |
| 651 | // TODO: extend |
| 652 | } |
| 653 | |
| 654 | class Wrapper<A> { |
| 655 | wrapped(ord: Order.Order<A>, eq: Equivalence.Equivalence<A>) { |
no test coverage detected
searching dependent graphs…