
{{alias}}( iterator, predicate[, thisArg] )
    Returns an iterator which returns unique values according to a predicate
    function.

    A returned iterator internally buffers unique values and, thus, has O(N)
    memory requirements.

    A predicate function is invoked for each iterated value against each value
    in an internal buffer consisting of previously identified unique values.
    Thus, as the number of unique values grows, so, too, does the number of
    predicate function invocations per iterated value.

    An iterated value is considered "unique" if the predicate function returns
    truthy values for all comparisons of the iterated value with each value in
    the internal buffer.

    If an environment supports Symbol.iterator and a provided iterator is
    iterable, the returned iterator is iterable.

    Parameters
    ----------
    iterator: Object
        Input iterator.

    predicate: Function
        A binary function with parameters `a` and `b` corresponding to iterated
        values. If the values are the same, the function should return `false`
        (i.e., non-unique); otherwise, if the values are distinct, the function
        should return `true` (i.e., unique).

    thisArg: any (optional)
        Execution context.

    Returns
    -------
    iterator: Object
        Iterator.

    iterator.next(): Function
        Returns an iterator protocol-compliant object containing the next
        iterated value (if one exists) and a boolean flag indicating whether the
        iterator is finished.

    iterator.return( [value] ): Function
        Finishes an iterator and returns a provided value.

    Examples
    --------
    > var it1 = {{alias:@stdlib/array/to-iterator}}( [ 1, 2, 1, 2, 4 ] );
    > function f( a, b ) { return ( a !== b ); };
    > var it2 = {{alias}}( it1, f );
    > var v = it2.next().value
    1
    > v = it2.next().value
    2
    > v = it2.next().value
    4
    > var bool = it2.next().done
    true

    See Also
    --------

