math-grads-0.1.5.1: src/Math/Grads/Utils.hs
-- | Different utility functions for usage in Math.Grads.
--
module Math.Grads.Utils
( nub
, subsets
, uniter
) where
import Data.List (group, sort)
-- | nub that works in O(n log n) time.
--
nub :: (Ord a, Eq a) => [a] -> [a]
nub = fmap head . group . sort
-- | Zips list with its tail.
--
uniter :: [a] -> [(a, a)]
uniter [] = []
uniter l = zip l $ drop 1 l
-- | Returns all possible subsets of given list as list of lists.
--
subsets :: [a] -> [[a]]
subsets [] = [[]]
subsets (x : xs) = subsets xs ++ ((x :) <$> subsets xs)