def uniq
      filter("uniq") do |yielder|
        seen = Set.new
        each do |element|
          key = if block_given?
            yield element
          else
            element
          end
          yielder.call(element) if seen.add?(key)
        end
      end
    end
def uniq
      filter("uniq") do |yielder|
        seen = Set.new
        each do |element|
          key = if block_given?
            yield element
          else
            element
          end
          yielder.call(element) if seen.add?(key)
        end
      end
    end
Remove duplicate values.

 @return [Enumerable] elements which have not been previously encountered
 @overload uniq

 @overload uniq(&block)

 @see ::Enumerable#uniq