import type { Curried } from '../../compositions/curry.js'; import { type Purried, purry } from '../../compositions/purry.js'; import type { Series, StaticSeries, SyncSeries } from '../../controls/types.js'; import { filterAsync, filterSync } from '../filters/filter.js'; import { _toSet } from './_to-set.js'; const _syncDifference = (input: SyncSeries, other: StaticSeries): Generator => { const otherSet = _toSet(other); return filterSync(input, value => !otherSet.has(value)); }; const _asyncDifference = ( input: Series, other: StaticSeries, ): AsyncGenerator> => { const otherSet = _toSet(other); return filterAsync(input, value => !otherSet.has(value)); }; export function differenceSync( ...args: Parameters> ): ReturnType>; export function differenceSync( ...args: Parameters>> ): ReturnType>>; export function differenceSync( ...args: Parameters>> ): ReturnType>> { return purry(_syncDifference)(...args); } export function differenceAsync( ...args: Parameters> ): ReturnType>; export function differenceAsync( ...args: Parameters>> ): ReturnType>>; export function differenceAsync( ...args: Parameters>> ): ReturnType>> { return purry(_asyncDifference)(...args); } export namespace difference { export const sync = differenceSync; export const async = differenceAsync; }