module ClassyPrelude.Vector
( Vector
) where
import CorePrelude
import ClassyPrelude.Classes
import qualified Data.Foldable as Foldable
import qualified Data.Vector as Vector
instance CanMap (Vector a) (Vector b) a b where
map = Vector.map
instance CanConcatMap (Vector a) (Vector b) a (Vector b) where
concatMap = Vector.concatMap
instance CanFilter (Vector a) a where
filter = Vector.filter
instance CanFilterM (Vector a) a where
filterM = Vector.filterM
instance CanLength (Vector a) Int where
length = Vector.length
instance CanSingleton (Vector a) a where
singleton = Vector.singleton
instance CanNull (Vector a) where
null = Vector.null
instance CanPack (Vector a) a where
pack = Vector.fromList
unpack = Vector.toList
instance CanIntersperse (Vector a) a where
intersperse _ xs | null xs = Vector.empty
intersperse sep xs = Vector.cons (Vector.head xs) $ prependToAll sep $ Vector.unsafeTail xs
where
prependToAll _ xs | null xs = Vector.empty
prependToAll sep xs = Vector.cons sep $ Vector.cons (Vector.head xs) $ prependToAll sep $ Vector.unsafeTail xs
instance Monad m => CanMapM (Vector i) (m (Vector o)) m i o where
mapM = Vector.mapM
instance CanMapM_ (Vector a) a where
mapM_ = Vector.mapM_
instance Eq x => CanMember (Vector x) x where
member x = Vector.any (== x)
instance CanBreak (Vector a) a where
break = Vector.break
span = Vector.span
dropWhile = Vector.dropWhile
takeWhile = Vector.takeWhile
instance CanAny (Vector a) a where
any = Vector.any
all = Vector.all
instance CanSplitAt (Vector a) Int where
splitAt = Vector.splitAt
instance CanFold (Vector a) a accum where
fold = Vector.foldl'
instance CanReverse (Vector a) where
reverse = Vector.reverse
instance CanReplicate (Vector a) a Int where
replicate = Vector.replicate
instance CanReplicateM (Vector a) a Int where
replicateM = Vector.replicateM
instance CanFind (Vector a) a where
find = Vector.find
instance (Monoid m) => CanConcat (Vector m) m where
concat = Foldable.fold
instance CanPartition (Vector a) a where
partition = Vector.partition
instance CanCons (Vector a) a where
cons = Vector.cons
instance CanUncons (Vector a) a where
uncons v = if null v then Nothing else Just (Vector.unsafeHead v, Vector.unsafeTail v)