packages feed

HQu-0.0.0.0: src/Q/SortedVector.hs

{-# LANGUAGE FlexibleContexts #-}
module Q.SortedVector
  (
    fromList
  , fromVector
  , fromSortedList
  , SortedVector(..)
  , minElement
  , maxElement
  ) where

import qualified Data.Vector.Algorithms.Merge  as V (sort)

import           Data.Vector.Storable  (Storable)
import qualified Data.Vector.Storable as V (Vector (..), fromList, length, head, last, modify)
import           Q.Types

newtype SortedVector a = SortedVector (V.Vector a)

fromList as = SortedVector (V.modify V.sort $ V.fromList as)
fromVector v = SortedVector (V.modify V.sort v)
fromSortedList xs = SortedVector $ V.fromList xs


minElement (SortedVector v) = V.head v
maxElement (SortedVector v) = V.last v