-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Sort primitive arrays -- -- This library provides a stable sorting algorithm for primitive arrays. -- The algorithm currently uses mergesort on large chunks and switches to -- insertion sort on small chunks. There are also novel improvements to -- increase the performance if the input array is already mostly sorted. @package primitive-sort @version 0.1.2.2 -- | Sort primitive arrays with a stable sorting algorithm. All functions -- in this module are marked as INLINABLE, so they will -- specialize when used in a monomorphic setting. module Data.Primitive.Sort -- | Sort an immutable array. Duplicate elements are preserved. sort :: (Prim a, Ord a) => PrimArray a -> PrimArray a -- | Sort an immutable array. Only a single copy of each duplicated element -- is preserved. sortUnique :: (Prim a, Ord a) => PrimArray a -> PrimArray a -- | Sort a tagged immutable array. Each element from the keys -- array is paired up with an element from the values array at -- the matching index. The sort permutes the values array so -- that a value end up in the same position as its corresponding key. The -- two argument array should be of the same length, but if one is shorter -- than the other, the longer one will be truncated so that the lengths -- match. -- -- Since the sort is stable, the values corresponding to a key that -- appears multiple times have their original order preserved. sortTagged :: forall k v karr varr. (Contiguous karr, Element karr k, Ord k, Contiguous varr, Element varr v) => karr k -> varr v -> (karr k, varr v) -- | Sort a tagged immutable array. Only a single copy of each duplicate -- key is preserved, along with the last value from values that -- corresponded to it. The two argument arrays should be of the same -- length, but if one is shorter than the other, the longer one will be -- truncated so that the lengths match. sortUniqueTagged :: forall k v karr varr. (ContiguousU karr, Element karr k, Ord k, ContiguousU varr, Element varr v) => karr k -> varr v -> (karr k, varr v) -- | Sort the mutable array. This operation preserves duplicate elements. -- The argument may either be modified in-place, or another array may be -- allocated and returned. The argument may not be reused after being -- passed to this function. sortMutable :: (Prim a, Ord a) => MutablePrimArray s a -> ST s (MutablePrimArray s a) -- | Sort an immutable array. Only a single copy of each duplicated element -- is preserved. This operation may run in-place, or it may need to -- allocate a new array, so the argument may not be reused after this -- function is applied to it. sortUniqueMutable :: forall s a. (Prim a, Ord a) => MutablePrimArray s a -> ST s (MutablePrimArray s a) -- | Sort an array of a key type k, rearranging the values of type -- v according to the element they correspond to in the key -- array. The argument arrays may not be reused after they are passed to -- the function. sortTaggedMutable :: (ContiguousU karr, Element karr k, Ord k, ContiguousU varr, Element varr v) => Mutable karr s k -> Mutable varr s v -> ST s (Mutable karr s k, Mutable varr s v) sortUniqueTaggedMutable :: (ContiguousU karr, Element karr k, Ord k, ContiguousU varr, Element varr v) => Mutable karr s k -> Mutable varr s v -> ST s (Mutable karr s k, Mutable varr s v)