| 750 | * @since 2.0.0 |
| 751 | */ |
| 752 | export const flatten = <A>(self: Iterable<Iterable<A>>): Iterable<A> => ({ |
| 753 | [Symbol.iterator]() { |
| 754 | const outerIterator = self[Symbol.iterator]() |
| 755 | let innerIterator: Iterator<A> | undefined |
| 756 | function next() { |
| 757 | if (innerIterator === undefined) { |
| 758 | const next = outerIterator.next() |
| 759 | if (next.done) { |
| 760 | return next |
| 761 | } |
| 762 | innerIterator = next.value[Symbol.iterator]() |
| 763 | } |
| 764 | const result = innerIterator.next() |
| 765 | if (result.done) { |
| 766 | innerIterator = undefined |
| 767 | return next() |
| 768 | } |
| 769 | return result |
| 770 | } |
| 771 | return { next } |
| 772 | } |
| 773 | }) |
| 774 | |
| 775 | /** |
| 776 | * @category filtering |