import type { Curried } from '../../compositions/curry.js'; import { type Purried, purry } from '../../compositions/purry.js'; import type { MaybePromise, Series, StaticSeries, SyncSeries } from '../../controls/types.js'; import { filterAsync, filterSync } from '../filters/filter.js'; import { _asyncDifferentWith, _syncDifferentWith } from './_different-with.js'; const _syncDifferenceWith = ( input: SyncSeries, other: StaticSeries, equals: (value: T, otherValue: U) => boolean, ): Generator => filterSync(input, _syncDifferentWith(other, equals)); const _asyncDifferenceWith = ( input: Series, other: StaticSeries, equals: (value: Awaited, otherValue: U) => MaybePromise, ): AsyncGenerator> => filterAsync(input, _asyncDifferentWith(other, equals)); export function differenceWithSync( ...args: Parameters> ): ReturnType>; export function differenceWithSync( ...args: Parameters>> ): ReturnType>>; export function differenceWithSync( ...args: Parameters>> ): ReturnType>> { return purry(_syncDifferenceWith)(...args); } export function differenceWithAsync( ...args: Parameters> ): ReturnType>; export function differenceWithAsync( ...args: Parameters>> ): ReturnType>>; export function differenceWithAsync( ...args: Parameters>> ): ReturnType>> { return purry(_asyncDifferenceWith)(...args); } export namespace differenceWith { export const sync = differenceWithSync; export const async = differenceWithAsync; }