| 530 | * Separate elements |
| 531 | */ |
| 532 | export function separate<E, A>( |
| 533 | EE: Equivalence.Equivalence<E>, |
| 534 | EA: Equivalence.Equivalence<A> |
| 535 | ): (fa: Set<Result.Result<A, E>>) => readonly [Set<E>, Set<A>] { |
| 536 | return (fa) => { |
| 537 | const elemEE = elem_(EE) |
| 538 | const elemEA = elem_(EA) |
| 539 | const left: MutableSet<E> = new Set() |
| 540 | const right: MutableSet<A> = new Set() |
| 541 | fa.forEach((e) => { |
| 542 | switch (e._tag) { |
| 543 | case "Failure": |
| 544 | if (!elemEE(left, e.failure)) { |
| 545 | left.add(e.failure) |
| 546 | } |
| 547 | break |
| 548 | case "Success": |
| 549 | if (!elemEA(right, e.success)) { |
| 550 | right.add(e.success) |
| 551 | } |
| 552 | break |
| 553 | } |
| 554 | }) |
| 555 | return tuple(left, right) |
| 556 | } |
| 557 | } |
| 558 | |
| 559 | /** |
| 560 | * Filter + Map |