-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Set and bag operations on ordered lists -- -- Ordered Lists @package data-ordlist @version 0.2 -- | This module implements bag and set operations on ordered lists. Except -- for variations of the sort and isSorted functions, every -- function assumes that any list arguments are sorted lists. Assuming -- this precondition is met, every resulting list is also sorted. -- -- Note that these functions handle multisets, and are left-biased. Thus, -- even assuming the arguments are sorted, isect does not always -- return the same results as Data.List.intersection, due to -- multiplicity. module Data.List.Ordered -- | member returns True if the element appears in the -- ordered list member :: (Ord a) => a -> [a] -> Bool -- | memberBy is the non-overloaded version of member memberBy :: (a -> a -> Ordering) -> a -> [a] -> Bool -- | has returns True if the element appears in the list; it -- is a function from an ordered list to its characteristic function. has :: (Ord a) => [a] -> a -> Bool -- | hasBy is the non-overloaded version of has hasBy :: (a -> a -> Ordering) -> [a] -> a -> Bool -- | subset returns true if the first list is a sub-list of the -- second. subset :: (Ord a) => [a] -> [a] -> Bool -- | subsetBy is the non-overloaded version of subset subsetBy :: (a -> a -> Ordering) -> [a] -> [a] -> Bool -- | isSorted returns True if the elements of a list occur in -- non-descending order, equivalent to isSortedBy (<=) isSorted :: (Ord a) => [a] -> Bool -- | isSortedBy returns True if the predicate returns true -- for all adjacent pairs of elements in the list isSortedBy :: (a -> a -> Bool) -> [a] -> Bool -- | insertBag inserts an element into a list, allowing for -- duplicate elements insertBag :: (Ord a) => a -> [a] -> [a] -- | insertBagBy is the non-overloaded version of insertBag insertBagBy :: (a -> a -> Ordering) -> a -> [a] -> [a] -- | insertSet inserts an element into an ordered list, or replaces -- the first occurrence if it is already there. insertSet :: (Ord a) => a -> [a] -> [a] -- | insertSetBy is the non-overloaded version of insertSet insertSetBy :: (a -> a -> Ordering) -> a -> [a] -> [a] -- | isect computes the intersection of two ordered lists. The -- result contains those elements contained in both arguments -- --
--   isect [1,3,5] [2,4,6] == []
--   isect [2,4,6,8] [3,6,9] == [6]
--   isect [1,2,2,2] [1,1,1,2,2] == [1,2,2]
--   
isect :: (Ord a) => [a] -> [a] -> [a] -- | isectBy is the non-overloaded version of isect isectBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a] -- | union computes the union of two ordered lists. The result -- contains those elements contained in either argument; elements that -- appear in both lists are appear in the result only once. -- --
--   union [1,3,5] [2,4,6] == [1..6]
--   union [2,4,6,8] [3,6,9] == [2,3,4,6,8,9]
--   union [1,2,2,2] [1,1,1,2,2] == [1,1,1,2,2,2]
--   
union :: (Ord a) => [a] -> [a] -> [a] -- | unionBy is the non-overloaded version of union unionBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a] -- | minus computes the multiset difference of two ordered lists. -- Each occurence of an element in the second argument is removed from -- the first list, if it is there. -- --
--   minus [1,3,5] [2,4,6] == [1,3,5]
--   minus [2,4,6,8] [3,6,9] == [2,4,8]
--   minus [1,2,2,2] [1,1,1,2,2] == [2]
--   
minus :: (Ord a) => [a] -> [a] -> [a] -- | minusBy is the non-overloaded version of minus minusBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a] -- | xunion computes the multiset exclusive union of two ordered -- lists. The result contains those elements that appear in either list, -- but not both. -- --
--   xunion [1,3,5] [2,4,6] == [1..6]
--   xunion [2,4,6,8] [3,6,9] == [2,3,4,8]
--   xunion [1,2,2,2] [1,1,1,2,2] == [1,1,2]
--   
xunion :: (Ord a) => [a] -> [a] -> [a] -- | xunionBy is the non-overloaded version of xunion xunionBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a] -- | merge combines all elements of two ordered lists. The result -- contains those elements that appear in either list; elements that -- appear in both lists appear in the result multiple times. -- --
--   merge [1,3,5] [2,4,6] == [1,2,3,4,5,6]
--   merge [2,4,6,8] [3,6,9] == [2,3,4,6,6,8,9]
--   merge [1,2,2,2] [1,1,1,2,2] == [1,1,1,1,2,2,2,2,2]
--   
merge :: (Ord a) => [a] -> [a] -> [a] -- | mergeBy is the non-overloaded version of merge mergeBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a] -- | On ordered lists, nub is equivalent to Data.List.nub, -- except that it runs in linear time instead of quadratic. On unordered -- lists it also removes elements that are smaller than any preceding -- element. -- --
--   nub [1,1,1,2,2] == [1,2]
--   nub [2,0,1,3,3] == [2,3]
--   nub = nubBy (<)
--   
nub :: (Ord a) => [a] -> [a] -- | nubBy is the greedy algorithm that returns a sublist of its -- input such that isSortedBy is true. -- --
--   isSortedBy pred (nubBy pred xs) == True
--   
nubBy :: (a -> a -> Bool) -> [a] -> [a] -- | The sort function implements a stable sorting algorithm. It is -- a special case of sortBy, which allows the programmer to supply -- their own comparison function. sort :: (Ord a) => [a] -> [a] -- | The sortBy function is the non-overloaded version of -- sort. sortBy :: (a -> a -> Ordering) -> [a] -> [a] -- | sortOn provides the decorate-sort-undecorate idiom, aka the -- "Schwartzian transform" sortOn :: (Ord b) => (a -> b) -> [a] -> [a] -- | This variant of sortOn recomputes the function to sort on every -- comparison. This can is better for functions that are cheap to -- compute, including projections. sortOn' :: (Ord b) => (a -> b) -> [a] -> [a] -- | nubSort is equivalent to nub . sort, -- except somewhat more efficient as duplicates are removed as it sorts. -- It is essentially Data.List.sort, a mergesort by Ian Lynagh, with -- merge replaced by union. nubSort :: (Ord a) => [a] -> [a] -- | nubSortBy is the non-overloaded version of nubSort nubSortBy :: (a -> a -> Ordering) -> [a] -> [a] -- | nubSortOn provides decorate-sort-undecorate for nubSort nubSortOn :: (Ord b) => (a -> b) -> [a] -> [a] -- | This variant of nubSortOn recomputes the function for each -- comparison. nubSortOn' :: (Ord b) => (a -> b) -> [a] -> [a]