universum-1.7.2: Custom prelude used in Serokell

Universum.Nub

Description

Functions to remove duplicates from a list.

# Performance

To check the performance many benchmarks were done. Benchmarks were made on lists of Ints and Texts. There were two types of list to use:

• Lists which consist of many different elements
• Lists which consist of many same elements

Here are some recomendations for usage of particular functions based on benchmarking resutls.

• hashNub is faster than ordNub when there're not so many different values in the list.
• hashNub is the fastest with Text.
• sortNub has better performance than ordNub but should be used when sorting is also needed.
• unstableNub has better performance than hashNub but doesn't save the original order.
Synopsis

# Documentation

hashNub :: (Eq a, Hashable a) => [a] -> [a] Source #

Like nub but runs in O(n * log_16(n)) time and requires Hashable.

>>> hashNub [3, 3, 3, 2, 2, -1, 1]
[3,2,-1,1]


ordNub :: Ord a => [a] -> [a] Source #

Like nub but runs in O(n * log n) time and requires Ord.

>>> ordNub [3, 3, 3, 2, 2, -1, 1]
[3,2,-1,1]


sortNub :: Ord a => [a] -> [a] Source #

Like ordNub but also sorts a list.

>>> sortNub [3, 3, 3, 2, 2, -1, 1]
[-1,1,2,3]


unstableNub :: (Eq a, Hashable a) => [a] -> [a] Source #

Like hashNub but has better performance and also doesn't save the order.

>>> unstableNub [3, 3, 3, 2, 2, -1, 1]
[1,2,3,-1]