HQu-0.0.0.5: src/Q/SortedVector.hs
{-# LANGUAGE FlexibleContexts #-}
module Q.SortedVector
(
fromList
, fromVector
, fromSortedList
, SortedVector(..)
, minElement
, maxElement
) where
import qualified Data.Vector.Algorithms.Merge as Merge (sort)
import qualified Data.Vector.Storable as V (Storable, Vector, fromList, head, last, modify)
-- | A sorted vector.
newtype SortedVector a = SortedVector (V.Vector a)
-- | construct a 'SortedVector' from a list
fromList :: (V.Storable a, Ord a) => [a] -> SortedVector a
fromList as = SortedVector (V.modify Merge.sort $ V.fromList as)
fromVector :: (V.Storable a, Ord a) => V.Vector a -> SortedVector a
fromVector v = SortedVector (V.modify Merge.sort v)
fromSortedList :: V.Storable a => [a] -> SortedVector a
fromSortedList xs = SortedVector $ V.fromList xs
minElement :: V.Storable a => SortedVector a -> a
minElement (SortedVector v) = V.head v
maxElement :: V.Storable a => SortedVector a -> a
maxElement (SortedVector v) = V.last v