/** @module array/unique.ts */ import { BasicTypes, Literal, Unique } from '../helper-types' import { appendUnique } from './appendUnique' export function unique<_A extends BasicTypes, A extends Literal<_A>>( arr: A ): Unique export function unique( arr: A ): A /** * Get a copy of the array without duplicates. Attempts to use literal types. * @param arr Array to remove duplicates from * @sig a[] -> a[] * @example * unique([1,2,[3],4,4,4,[3]]) * //=> [1,2,[3],4] : [1,2,[3],4] */ export function unique( arr ) { return arr.reduce( ( acc, item ) => appendUnique( acc, item ), [] ) } export default unique