export function* uniqBy( iterable: Iterable , fn: (element: T, index: number) => U ): IterableIterator { const bucket = new Set() let index = 0 for (const element of iterable) { const result = fn(element, index) if (!bucket.has(result)) { yield element bucket.add(result) } index++ } }