vinyl-vectors 0.1.0.3 → 0.2.0
raw patch · 16 files changed
+2909/−1913 lines, 16 filesdep +bytestringdep +data-defaultdep +template-haskelldep ~textPVP ok
version bump matches the API change (PVP)
Dependencies added: bytestring, data-default, template-haskell
Dependency ranges changed: text
API changes (from Hackage documentation)
- Data.Vector.Vinyl.Default: (!) :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Int -> Rec Identity rs
- Data.Vector.Vinyl.Default: (!?) :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Int -> Maybe (Rec Identity rs)
- Data.Vector.Vinyl.Default: (++) :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: (//) :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> [(Int, Rec Identity rs)] -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: accum :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> c -> Rec Identity rs) -> Vector (Rec Identity rs) -> [(Int, c)] -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: all :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Bool
- Data.Vector.Vinyl.Default: any :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Bool
- Data.Vector.Vinyl.Default: break :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: concat :: Vector Vector (Rec Identity rs) => [Vector (Rec Identity rs)] -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: concatMap :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Vector (Rec Identity ss)) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: cons :: Vector Vector (Rec Identity rs) => Rec Identity rs -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: constructN :: Vector Vector (Rec Identity rs) => Int -> (Vector (Rec Identity rs) -> Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: constructrN :: Vector Vector (Rec Identity rs) => Int -> (Vector (Rec Identity rs) -> Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: convert :: (Vector v a, Vector w a) => v a -> w a
- Data.Vector.Vinyl.Default: copy :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Mutable Vector (PrimState m) (Rec Identity rs) -> Vector (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default: create :: Vector Vector (Rec Identity rs) => (forall s. ST s (Mutable Vector s (Rec Identity rs))) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: data MVector :: * -> * -> *
- Data.Vector.Vinyl.Default: data Vector :: * -> *
- Data.Vector.Vinyl.Default: drop :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: dropWhile :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: elem :: (Vector Vector (Rec Identity rs), Eq (Rec Identity rs)) => Rec Identity rs -> Vector (Rec Identity rs) -> Bool
- Data.Vector.Vinyl.Default: elemIndex :: (Vector Vector (Rec Identity rs), Eq (Rec Identity rs)) => Rec Identity rs -> Vector (Rec Identity rs) -> Maybe Int
- Data.Vector.Vinyl.Default: empty :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: filter :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: filterM :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> m Bool) -> Vector (Rec Identity rs) -> m (Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: find :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Maybe (Rec Identity rs)
- Data.Vector.Vinyl.Default: findIndex :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Maybe Int
- Data.Vector.Vinyl.Default: fold1M :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default: fold1M' :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default: fold1M'_ :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default: fold1M_ :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default: foldM :: (Monad m, Vector Vector (Rec Identity rs)) => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m r
- Data.Vector.Vinyl.Default: foldM' :: (Monad m, Vector Vector (Rec Identity rs)) => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m r
- Data.Vector.Vinyl.Default: foldM'_ :: (Monad m, Vector Vector (Rec Identity rs)) => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default: foldM_ :: (Monad m, Vector Vector (Rec Identity rs)) => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default: foldl :: Vector Vector (Rec Identity rs) => (r -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r
- Data.Vector.Vinyl.Default: foldl' :: Vector Vector (Rec Identity rs) => (r -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r
- Data.Vector.Vinyl.Default: foldl1 :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: foldl1' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: foldr :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r
- Data.Vector.Vinyl.Default: foldr' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r
- Data.Vector.Vinyl.Default: foldr1 :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: foldr1' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: forM :: (Monad m, Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => Vector (Rec Identity rs) -> (Rec Identity rs -> m (Rec Identity ss)) -> m (Vector (Rec Identity ss))
- Data.Vector.Vinyl.Default: forM_ :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> (Rec Identity rs -> m b) -> m ()
- Data.Vector.Vinyl.Default: force :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: freeze :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Mutable Vector (PrimState m) (Rec Identity rs) -> m (Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: fromList :: Vector Vector (Rec Identity rs) => [Rec Identity rs] -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: fromListN :: Vector Vector (Rec Identity rs) => Int -> [Rec Identity rs] -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: generate :: Vector Vector (Rec Identity rs) => Int -> (Int -> Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: generateM :: (Monad m, Vector Vector (Rec Identity rs)) => Int -> (Int -> m (Rec Identity rs)) -> m (Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: head :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: headM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default: ifilter :: Vector Vector (Rec Identity rs) => (Int -> Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: ifoldl :: Vector Vector (Rec Identity rs) => (r -> Int -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r
- Data.Vector.Vinyl.Default: ifoldl' :: Vector Vector (Rec Identity rs) => (r -> Int -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r
- Data.Vector.Vinyl.Default: ifoldr :: Vector Vector (Rec Identity rs) => (Int -> Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r
- Data.Vector.Vinyl.Default: ifoldr' :: Vector Vector (Rec Identity rs) => (Int -> Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r
- Data.Vector.Vinyl.Default: imap :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Int -> Rec Identity rs -> Rec Identity ss) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: indexM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> Int -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default: init :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: iterateN :: Vector Vector (Rec Identity rs) => Int -> (Rec Identity rs -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: last :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: lastM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default: length :: Vector (Rec Identity rs) -> Int
- Data.Vector.Vinyl.Default: map :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: mapM :: (Monad m, Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> m (Rec Identity ss)) -> Vector (Rec Identity rs) -> m (Vector (Rec Identity ss))
- Data.Vector.Vinyl.Default: mapM_ :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> m b) -> Vector (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default: maxIndex :: (Vector Vector (Rec Identity rs), Ord (Rec Identity rs)) => Vector (Rec Identity rs) -> Int
- Data.Vector.Vinyl.Default: maxIndexBy :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Int
- Data.Vector.Vinyl.Default: maximum :: (Vector Vector (Rec Identity rs), Ord (Rec Identity rs)) => Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: maximumBy :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: minIndex :: (Vector Vector (Rec Identity rs), Ord (Rec Identity rs)) => Vector (Rec Identity rs) -> Int
- Data.Vector.Vinyl.Default: minIndexBy :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Int
- Data.Vector.Vinyl.Default: minimum :: (Vector Vector (Rec Identity rs), Ord (Rec Identity rs)) => Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: minimumBy :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: modify :: (Vector Vector (Rec Identity rs)) => (forall s. Mutable Vector s (Rec Identity rs) -> ST s ()) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: notElem :: (Vector Vector (Rec Identity rs), Eq (Rec Identity rs)) => Rec Identity rs -> Vector (Rec Identity rs) -> Bool
- Data.Vector.Vinyl.Default: null :: Vector (Rec Identity rs) -> Bool
- Data.Vector.Vinyl.Default: partition :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: postscanl :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: postscanl' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: postscanr :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: postscanr' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: prescanl :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: prescanl' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: prescanr :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: prescanr' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: replicate :: Vector Vector (Rec Identity rs) => Int -> Rec Identity rs -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: replicateM :: (Monad m, Vector Vector (Rec Identity rs)) => Int -> m (Rec Identity rs) -> m (Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: reverse :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: scanl :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: scanl' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: scanl1 :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: scanl1' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: scanr :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: scanr' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
- Data.Vector.Vinyl.Default: scanr1 :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: scanr1' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: singleton :: Vector Vector (Rec Identity rs) => Rec Identity rs -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: slice :: Vector Vector (Rec Identity rs) => Int -> Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: snoc :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: span :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: splitAt :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: tail :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: take :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: takeWhile :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: thaw :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Mutable Vector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default: toList :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> [Rec Identity rs]
- Data.Vector.Vinyl.Default: unfoldr :: Vector Vector (Rec Identity rs) => (c -> Maybe (Rec Identity rs, c)) -> c -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unfoldrN :: Vector Vector (Rec Identity rs) => Int -> (c -> Maybe (Rec Identity rs, c)) -> c -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeAccum :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> c -> Rec Identity rs) -> Vector (Rec Identity rs) -> [(Int, c)] -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeCopy :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Mutable Vector (PrimState m) (Rec Identity rs) -> Vector (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default: unsafeDrop :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeFreeze :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Mutable Vector (PrimState m) (Rec Identity rs) -> m (Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: unsafeHead :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: unsafeHeadM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeIndex :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Int -> Rec Identity rs
- Data.Vector.Vinyl.Default: unsafeIndexM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> Int -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeInit :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeLast :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs
- Data.Vector.Vinyl.Default: unsafeLastM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeSlice :: Vector Vector (Rec Identity rs) => Int -> Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeTail :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeTake :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unsafeThaw :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Mutable Vector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default: unsafeUpd :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> [(Int, Rec Identity rs)] -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default: unstablePartition :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
- Data.Vector.Vinyl.Default: zipWithM :: (Monad m, Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss), Vector Vector (Rec Identity ts)) => (Rec Identity rs -> Rec Identity ss -> m (Rec Identity ts)) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss) -> m (Vector (Rec Identity ts))
- Data.Vector.Vinyl.Default: zipWithM_ :: (Monad m, Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> m e) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss) -> m ()
- Data.Vector.Vinyl.Default.Implication: listAllMVector :: Rec proxy rs -> ListAll rs HasDefaultVector :- MVector MVector (Rec Identity rs)
- Data.Vector.Vinyl.Default.Implication: listAllVector :: Rec proxy rs -> ListAll rs HasDefaultVector :- Vector Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default.Internal: MV :: !Int -> !(Rec (MVectorVal s) rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Internal: MVectorVal :: Mutable (DefaultVector t) s t -> MVectorVal s t
- Data.Vector.Vinyl.Default.Internal: V :: !Int -> !(Rec VectorVal rs) -> Vector (Rec Identity rs)
- Data.Vector.Vinyl.Default.Internal: [getMVectorVal] :: MVectorVal s t -> Mutable (DefaultVector t) s t
- Data.Vector.Vinyl.Default.Internal: class (MVector (Mutable (DefaultVector t)) t, Vector (DefaultVector t) t) => HasDefaultVector t where type family DefaultVector t :: * -> *
- Data.Vector.Vinyl.Default.Internal: data MVector :: * -> * -> *
- Data.Vector.Vinyl.Default.Internal: data Vector :: * -> *
- Data.Vector.Vinyl.Default.Internal: instance (Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity rs), Data.Vector.Vinyl.Default.Internal.HasDefaultVector r) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (r : rs))
- Data.Vector.Vinyl.Default.Internal: instance (Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity rs), Data.Vector.Vinyl.Default.Internal.HasDefaultVector r) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (r : rs))
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity '[])
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity rs) => Data.Vector.Vinyl.Default.Internal.HasDefaultVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity rs)
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity '[])
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Vinyl.Default.Internal.HasDefaultVector Data.Text.Internal.Lazy.Text
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Vinyl.Default.Internal.HasDefaultVector Data.Text.Internal.Text
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Vinyl.Default.Internal.HasDefaultVector GHC.Types.Bool
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Vinyl.Default.Internal.HasDefaultVector GHC.Types.Char
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Vinyl.Default.Internal.HasDefaultVector GHC.Types.Double
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Vinyl.Default.Internal.HasDefaultVector GHC.Types.Float
- Data.Vector.Vinyl.Default.Internal: instance Data.Vector.Vinyl.Default.Internal.HasDefaultVector GHC.Types.Int
- Data.Vector.Vinyl.Default.Internal: newtype MVectorVal s t
- Data.Vector.Vinyl.Default.Mutable: MV :: !Int -> !(Rec (MVectorVal s) rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: clear :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default.Mutable: clone :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default.Mutable: copy :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default.Mutable: data MVector :: * -> * -> *
- Data.Vector.Vinyl.Default.Mutable: drop :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: grow :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (MVector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default.Mutable: init :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: length :: MVector s (Rec Identity rs) -> Int
- Data.Vector.Vinyl.Default.Mutable: move :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default.Mutable: new :: (PrimMonad m, MVector MVector (Rec Identity rs)) => Int -> m (MVector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default.Mutable: null :: MVector s (Rec Identity rs) -> Bool
- Data.Vector.Vinyl.Default.Mutable: overlaps :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs) -> Bool
- Data.Vector.Vinyl.Default.Mutable: read :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: replicate :: (PrimMonad m, MVector MVector (Rec Identity rs)) => Int -> (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default.Mutable: replicateM :: (PrimMonad m, MVector MVector (Rec Identity rs)) => Int -> m (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default.Mutable: set :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default.Mutable: slice :: MVector MVector (Rec Identity rs) => Int -> Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: splitAt :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> (MVector s (Rec Identity rs), MVector s (Rec Identity rs))
- Data.Vector.Vinyl.Default.Mutable: swap :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> Int -> m ()
- Data.Vector.Vinyl.Default.Mutable: tail :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: take :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: unsafeCopy :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default.Mutable: unsafeDrop :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: unsafeGrow :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (MVector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default.Mutable: unsafeInit :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: unsafeMove :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default.Mutable: unsafeNew :: (PrimMonad m, MVector MVector (Rec Identity rs)) => Int -> m (MVector (PrimState m) (Rec Identity rs))
- Data.Vector.Vinyl.Default.Mutable: unsafeRead :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: unsafeSlice :: MVector MVector (Rec Identity rs) => Int -> Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: unsafeSwap :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> Int -> m ()
- Data.Vector.Vinyl.Default.Mutable: unsafeTail :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: unsafeTake :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
- Data.Vector.Vinyl.Default.Mutable: unsafeWrite :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> (Rec Identity rs) -> m ()
- Data.Vector.Vinyl.Default.Mutable: write :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: (!) :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Int -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: (!?) :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Int -> Maybe (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: (++) :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: (//) :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> [(Int, Rec Identity rs)] -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: accum :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> c -> Rec Identity rs) -> Vector (Rec Identity rs) -> [(Int, c)] -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: all :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Bool
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: any :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Bool
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: break :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: concat :: Vector Vector (Rec Identity rs) => [Vector (Rec Identity rs)] -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: concatMap :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Vector (Rec Identity ss)) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: cons :: Vector Vector (Rec Identity rs) => Rec Identity rs -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: constructN :: Vector Vector (Rec Identity rs) => Int -> (Vector (Rec Identity rs) -> Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: constructrN :: Vector Vector (Rec Identity rs) => Int -> (Vector (Rec Identity rs) -> Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: convert :: (Vector v a, Vector w a) => v a -> w a
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: copy :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Mutable Vector (PrimState m) (Rec Identity rs) -> Vector (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: create :: Vector Vector (Rec Identity rs) => (forall s. ST s (Mutable Vector s (Rec Identity rs))) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: data MVector :: * -> * -> *
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: data Vector :: * -> *
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: drop :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: dropWhile :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: elem :: (Vector Vector (Rec Identity rs), Eq (Rec Identity rs)) => Rec Identity rs -> Vector (Rec Identity rs) -> Bool
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: elemIndex :: (Vector Vector (Rec Identity rs), Eq (Rec Identity rs)) => Rec Identity rs -> Vector (Rec Identity rs) -> Maybe Int
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: empty :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: filter :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: filterM :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> m Bool) -> Vector (Rec Identity rs) -> m (Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: find :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Maybe (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: findIndex :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Maybe Int
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: fold1M :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: fold1M' :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: fold1M'_ :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: fold1M_ :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldM :: (Monad m, Vector Vector (Rec Identity rs)) => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldM' :: (Monad m, Vector Vector (Rec Identity rs)) => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldM'_ :: (Monad m, Vector Vector (Rec Identity rs)) => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldM_ :: (Monad m, Vector Vector (Rec Identity rs)) => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldl :: Vector Vector (Rec Identity rs) => (r -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldl' :: Vector Vector (Rec Identity rs) => (r -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldl1 :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldl1' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldr :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldr' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldr1 :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: foldr1' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: forM :: (Monad m, Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => Vector (Rec Identity rs) -> (Rec Identity rs -> m (Rec Identity ss)) -> m (Vector (Rec Identity ss))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: forM_ :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> (Rec Identity rs -> m b) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: force :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: freeze :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Mutable Vector (PrimState m) (Rec Identity rs) -> m (Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: fromList :: Vector Vector (Rec Identity rs) => [Rec Identity rs] -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: fromListN :: Vector Vector (Rec Identity rs) => Int -> [Rec Identity rs] -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: generate :: Vector Vector (Rec Identity rs) => Int -> (Int -> Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: generateM :: (Monad m, Vector Vector (Rec Identity rs)) => Int -> (Int -> m (Rec Identity rs)) -> m (Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: head :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: headM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: ifilter :: Vector Vector (Rec Identity rs) => (Int -> Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: ifoldl :: Vector Vector (Rec Identity rs) => (r -> Int -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: ifoldl' :: Vector Vector (Rec Identity rs) => (r -> Int -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: ifoldr :: Vector Vector (Rec Identity rs) => (Int -> Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: ifoldr' :: Vector Vector (Rec Identity rs) => (Int -> Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: imap :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Int -> Rec Identity rs -> Rec Identity ss) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: indexM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> Int -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: init :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: iterateN :: Vector Vector (Rec Identity rs) => Int -> (Rec Identity rs -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: last :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: lastM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: length :: Vector (Rec Identity rs) -> Int
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: map :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: mapM :: (Monad m, Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> m (Rec Identity ss)) -> Vector (Rec Identity rs) -> m (Vector (Rec Identity ss))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: mapM_ :: (Monad m, Vector Vector (Rec Identity rs)) => (Rec Identity rs -> m b) -> Vector (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: maxIndex :: (Vector Vector (Rec Identity rs), Ord (Rec Identity rs)) => Vector (Rec Identity rs) -> Int
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: maxIndexBy :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Int
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: maximum :: (Vector Vector (Rec Identity rs), Ord (Rec Identity rs)) => Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: maximumBy :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: minIndex :: (Vector Vector (Rec Identity rs), Ord (Rec Identity rs)) => Vector (Rec Identity rs) -> Int
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: minIndexBy :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Int
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: minimum :: (Vector Vector (Rec Identity rs), Ord (Rec Identity rs)) => Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: minimumBy :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: modify :: (Vector Vector (Rec Identity rs)) => (forall s. Mutable Vector s (Rec Identity rs) -> ST s ()) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: notElem :: (Vector Vector (Rec Identity rs), Eq (Rec Identity rs)) => Rec Identity rs -> Vector (Rec Identity rs) -> Bool
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: null :: Vector (Rec Identity rs) -> Bool
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: partition :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: postscanl :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: postscanl' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: postscanr :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: postscanr' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: prescanl :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: prescanl' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: prescanr :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: prescanr' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: replicate :: Vector Vector (Rec Identity rs) => Int -> Rec Identity rs -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: replicateM :: (Monad m, Vector Vector (Rec Identity rs)) => Int -> m (Rec Identity rs) -> m (Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: reverse :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: scanl :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: scanl' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: scanl1 :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: scanl1' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: scanr :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: scanr' :: (Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: scanr1 :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: scanr1' :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: singleton :: Vector Vector (Rec Identity rs) => Rec Identity rs -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: slice :: Vector Vector (Rec Identity rs) => Int -> Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: snoc :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: span :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: splitAt :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: tail :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: take :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: takeWhile :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: thaw :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Mutable Vector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: toList :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> [Rec Identity rs]
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unfoldr :: Vector Vector (Rec Identity rs) => (c -> Maybe (Rec Identity rs, c)) -> c -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unfoldrN :: Vector Vector (Rec Identity rs) => Int -> (c -> Maybe (Rec Identity rs, c)) -> c -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeAccum :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> c -> Rec Identity rs) -> Vector (Rec Identity rs) -> [(Int, c)] -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeCopy :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Mutable Vector (PrimState m) (Rec Identity rs) -> Vector (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeDrop :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeFreeze :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Mutable Vector (PrimState m) (Rec Identity rs) -> m (Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeHead :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeHeadM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeIndex :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Int -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeIndexM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> Int -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeInit :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeLast :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Rec Identity rs
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeLastM :: (Monad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeSlice :: Vector Vector (Rec Identity rs) => Int -> Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeTail :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeTake :: Vector Vector (Rec Identity rs) => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeThaw :: (PrimMonad m, Vector Vector (Rec Identity rs)) => Vector (Rec Identity rs) -> m (Mutable Vector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unsafeUpd :: Vector Vector (Rec Identity rs) => Vector (Rec Identity rs) -> [(Int, Rec Identity rs)] -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: unstablePartition :: Vector Vector (Rec Identity rs) => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: zipWithM :: (Monad m, Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss), Vector Vector (Rec Identity ts)) => (Rec Identity rs -> Rec Identity ss -> m (Rec Identity ts)) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss) -> m (Vector (Rec Identity ts))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic: zipWithM_ :: (Monad m, Vector Vector (Rec Identity rs), Vector Vector (Rec Identity ss)) => (Rec Identity rs -> Rec Identity ss -> m e) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Implication: listAllMVector :: Rec proxy rs -> ListAll rs HasDefaultVector :- MVector MVector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Implication: listAllVector :: Rec proxy rs -> ListAll rs HasDefaultVector :- Vector Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: MV :: !Int -> !(Rec (MVectorVal s) rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: V :: !Int -> !(Rec VectorVal rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: class (MVector (Mutable (DefaultVector t)) t, Vector (DefaultVector t) t) => HasDefaultVector t where type family DefaultVector t :: * -> *
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: data MVector :: * -> * -> *
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: data Vector :: * -> *
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: instance (Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity rs), Data.Vector.Vinyl.Default.Types.HasDefaultVector r) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (r : rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: instance (Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity rs), Data.Vector.Vinyl.Default.Types.HasDefaultVector r) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (r : rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: instance Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity '[])
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal: instance Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity '[])
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: MV :: !Int -> !(Rec (MVectorVal s) rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: clear :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: clone :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: copy :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: data MVector :: * -> * -> *
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: drop :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: grow :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (MVector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: init :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: length :: MVector s (Rec Identity rs) -> Int
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: move :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: new :: (PrimMonad m, MVector MVector (Rec Identity rs)) => Int -> m (MVector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: null :: MVector s (Rec Identity rs) -> Bool
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: overlaps :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs) -> Bool
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: read :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: replicate :: (PrimMonad m, MVector MVector (Rec Identity rs)) => Int -> (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: replicateM :: (PrimMonad m, MVector MVector (Rec Identity rs)) => Int -> m (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: set :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: slice :: MVector MVector (Rec Identity rs) => Int -> Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: splitAt :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> (MVector s (Rec Identity rs), MVector s (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: swap :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> Int -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: tail :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: take :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeCopy :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeDrop :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeGrow :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (MVector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeInit :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeMove :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeNew :: (PrimMonad m, MVector MVector (Rec Identity rs)) => Int -> m (MVector (PrimState m) (Rec Identity rs))
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeRead :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeSlice :: MVector MVector (Rec Identity rs) => Int -> Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeSwap :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> Int -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeTail :: MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeTake :: MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: unsafeWrite :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable: write :: (PrimMonad m, MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> (Rec Identity rs) -> m ()
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Implication: listAllMVector :: (rs ~ (a : as)) => Rec proxy rs -> ListAll rs HasDefaultVector :- MVector MVector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Implication: listAllVector :: (rs ~ (a : as)) => Rec proxy rs -> ListAll rs HasDefaultVector :- Vector Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: MV :: !(Rec (MVectorVal s) rs) -> MVector s (Rec Identity rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: V :: !(Rec VectorVal rs) -> Vector (Rec Identity rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: class (MVector (Mutable (DefaultVector t)) t, Vector (DefaultVector t) t) => HasDefaultVector t where type family DefaultVector t :: * -> *
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: data MVector :: * -> * -> *
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: data Vector :: * -> *
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: instance (Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (s : rs)), Data.Vector.Vinyl.Default.Types.HasDefaultVector r) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (r : s : rs))
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: instance (Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (s : rs)), Data.Vector.Vinyl.Default.Types.HasDefaultVector r) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (r : s : rs))
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector r => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal.Vector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity '[r])
+ Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector r => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal.MVector (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity '[r])
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Implication: listAllMVector :: (rs ~ (a : as)) => Rec f rs -> RecAll f rs HasDefaultVector :- MVector MVector (Rec f rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Implication: listAllMVector' :: (rs ~ (a : as)) => proxy1 f -> Rec proxy2 rs -> RecAll f rs HasDefaultVector :- MVector MVector (Rec f rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Implication: listAllVector :: (rs ~ (a : as)) => Rec f rs -> RecAll f rs HasDefaultVector :- Vector Vector (Rec f rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: MV :: !(Rec (Compose (MVectorVal s) f) rs) -> MVector s (Rec f rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: V :: !(Rec (Compose VectorVal f) rs) -> Vector (Rec f rs)
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: class (MVector (Mutable (DefaultVector t)) t, Vector (DefaultVector t) t) => HasDefaultVector t where type family DefaultVector t :: * -> *
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: data MVector :: * -> * -> *
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: data Vector :: * -> *
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: instance (Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal.Vector (Data.Vinyl.Core.Rec f (s : rs)), Data.Vector.Vinyl.Default.Types.HasDefaultVector (f r)) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal.Vector (Data.Vinyl.Core.Rec f (r : s : rs))
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: instance (Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal.MVector (Data.Vinyl.Core.Rec f (s : rs)), Data.Vector.Vinyl.Default.Types.HasDefaultVector (f r)) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal.MVector (Data.Vinyl.Core.Rec f (r : s : rs))
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector (f r) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal.Vector (Data.Vinyl.Core.Rec f '[r])
+ Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector (f r) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal.MVector (Data.Vinyl.Core.Rec f '[r])
+ Data.Vector.Vinyl.Default.Types: DefaultBoxed :: a -> DefaultBoxed a
+ Data.Vector.Vinyl.Default.Types: MVectorVal :: Mutable (DefaultVector t) s t -> MVectorVal s t
+ Data.Vector.Vinyl.Default.Types: VectorVal :: DefaultVector t t -> VectorVal t
+ Data.Vector.Vinyl.Default.Types: [getDefaultBoxed] :: DefaultBoxed a -> a
+ Data.Vector.Vinyl.Default.Types: [getMVectorVal] :: MVectorVal s t -> Mutable (DefaultVector t) s t
+ Data.Vector.Vinyl.Default.Types: [getVectorVal] :: VectorVal t -> DefaultVector t t
+ Data.Vector.Vinyl.Default.Types: class (MVector (Mutable (DefaultVector t)) t, Vector (DefaultVector t) t) => HasDefaultVector t where type family DefaultVector t :: * -> *
+ Data.Vector.Vinyl.Default.Types: instance (Data.Default.Class.Default a, Data.Default.Class.Default b, Data.Vector.Vinyl.Default.Types.HasDefaultVector a, Data.Vector.Vinyl.Default.Types.HasDefaultVector b) => Data.Vector.Vinyl.Default.Types.HasDefaultVector (Data.Either.Either a b)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Default.Class.Default a, Data.Vector.Vinyl.Default.Types.HasDefaultVector a) => Data.Vector.Vinyl.Default.Types.HasDefaultVector (GHC.Base.Maybe a)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Default.Class.Default a0, Data.Default.Class.Default b0, Data.Vector.Vinyl.Default.Types.HasDefaultVector a0, Data.Vector.Vinyl.Default.Types.HasDefaultVector b0) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Types.V_Either (Data.Either.Either a0 b0)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Default.Class.Default a0, Data.Default.Class.Default b0, Data.Vector.Vinyl.Default.Types.HasDefaultVector a0, Data.Vector.Vinyl.Default.Types.HasDefaultVector b0) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Types.MV_Either (Data.Either.Either a0 b0)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Default.Class.Default a0, Data.Vector.Vinyl.Default.Types.HasDefaultVector a0) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Types.V_Maybe (GHC.Base.Maybe a0)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Default.Class.Default a0, Data.Vector.Vinyl.Default.Types.HasDefaultVector a0) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Types.MV_Maybe (GHC.Base.Maybe a0)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Vector.Vinyl.Default.Types.HasDefaultVector a, Data.Vector.Vinyl.Default.Types.HasDefaultVector b) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Types.V_Tuple2 (a, b)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Vector.Vinyl.Default.Types.HasDefaultVector a, Data.Vector.Vinyl.Default.Types.HasDefaultVector b) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Types.MV_Tuple2 (a, b)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Vector.Vinyl.Default.Types.HasDefaultVector a, Data.Vector.Vinyl.Default.Types.HasDefaultVector b) => Data.Vector.Vinyl.Default.Types.HasDefaultVector (a, b)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Vector.Vinyl.Default.Types.HasDefaultVector a, Data.Vector.Vinyl.Default.Types.HasDefaultVector b, Data.Vector.Vinyl.Default.Types.HasDefaultVector c) => Data.Vector.Vinyl.Default.Types.HasDefaultVector (a, b, c)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Vector.Vinyl.Default.Types.HasDefaultVector a0, Data.Vector.Vinyl.Default.Types.HasDefaultVector b0, Data.Vector.Vinyl.Default.Types.HasDefaultVector c0) => Data.Vector.Generic.Base.Vector Data.Vector.Vinyl.Default.Types.V_Tuple3 (a0, b0, c0)
+ Data.Vector.Vinyl.Default.Types: instance (Data.Vector.Vinyl.Default.Types.HasDefaultVector a0, Data.Vector.Vinyl.Default.Types.HasDefaultVector b0, Data.Vector.Vinyl.Default.Types.HasDefaultVector c0) => Data.Vector.Generic.Mutable.MVector Data.Vector.Vinyl.Default.Types.MV_Tuple3 (a0, b0, c0)
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector (Data.Vector.Vinyl.Default.Types.DefaultBoxed a)
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector Data.ByteString.Internal.ByteString
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector Data.ByteString.Lazy.Internal.ByteString
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector Data.Text.Internal.Lazy.Text
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector Data.Text.Internal.Text
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Int.Int16
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Int.Int32
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Int.Int64
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Int.Int8
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Types.Bool
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Types.Char
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Types.Double
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Types.Float
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Types.Int
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Word.Word16
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Word.Word32
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Word.Word64
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector GHC.Word.Word8
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasDefaultVector [a]
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasVectorizableRepresentation (Data.Either.Either a b)
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasVectorizableRepresentation (GHC.Base.Maybe a)
+ Data.Vector.Vinyl.Default.Types: instance Data.Vector.Vinyl.Default.Types.HasVectorizableRepresentation (a, b, c)
+ Data.Vector.Vinyl.Default.Types: newtype DefaultBoxed a
+ Data.Vector.Vinyl.Default.Types: newtype MVectorVal s t
+ Data.Vector.Vinyl.Default.Types: newtype VectorVal t
+ Data.Vector.Vinyl.Default.Types.Deriving: derivingVector :: String -> Name -> Name -> Name -> TypeQ -> ExpQ -> ExpQ -> DecsQ
Files
- examples/sorting.hs +1/−1
- src/Data/Vector/Vinyl/Default.hs +0/−1313
- src/Data/Vector/Vinyl/Default/Empty/Monomorphic.hs +1313/−0
- src/Data/Vector/Vinyl/Default/Empty/Monomorphic/Implication.hs +46/−0
- src/Data/Vector/Vinyl/Default/Empty/Monomorphic/Internal.hs +231/−0
- src/Data/Vector/Vinyl/Default/Empty/Monomorphic/Mutable.hs +283/−0
- src/Data/Vector/Vinyl/Default/Implication.hs +0/−46
- src/Data/Vector/Vinyl/Default/Internal.hs +0/−263
- src/Data/Vector/Vinyl/Default/Mutable.hs +0/−283
- src/Data/Vector/Vinyl/Default/NonEmpty/Monomorphic/Implication.hs +49/−0
- src/Data/Vector/Vinyl/Default/NonEmpty/Monomorphic/Internal.hs +249/−0
- src/Data/Vector/Vinyl/Default/NonEmpty/Polymorphic/Implication.hs +52/−0
- src/Data/Vector/Vinyl/Default/NonEmpty/Polymorphic/Internal.hs +262/−0
- src/Data/Vector/Vinyl/Default/Types.hs +214/−0
- src/Data/Vector/Vinyl/Default/Types/Deriving.hs +189/−0
- vinyl-vectors.cabal +20/−7
examples/sorting.hs view
@@ -14,7 +14,7 @@ import Data.Proxy (Proxy(Proxy)) import Lens.Micro ((^.)) import Data.Vector.Vinyl.TypeLevel (ListAll)-import qualified Data.Vector.Vinyl.Default as V+import qualified Data.Vector.Vinyl.Default.Empty.Monomorphic as V import qualified Data.Vector.Algorithms.Intro as Intro import qualified Data.Vector.Algorithms.Merge as Merge
− src/Data/Vector/Vinyl/Default.hs
@@ -1,1313 +0,0 @@-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE KindSignatures #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE Rank2Types #-}--------------------------------------------------------------------------------- |--- Copyright : Andrew Martin--- License : BSD-style (see the file LICENSE)------ Maintainer : Andrew Martin <andrew.thaddeus@gmail.com>--- Stability : experimental--- Portability : non-portable------ There are two vector types provided by this module: 'Vector' and--- 'MVector'. They must be parameterized over a type that unifies--- with 'Rec Identity rs'. An example would be:------ > foo :: Vector (Rec Identity '[Int,Char,Bool])--- --- This vector stores records that have an 'Int', a 'Char', and a 'Bool'.-------------------------------------------------------------------------------module Data.Vector.Vinyl.Default- ( Vector, MVector-- -- * Accessors-- -- ** Length information- , length, null-- -- ** Indexing- , (!), (!?), head, last- , unsafeIndex, unsafeHead, unsafeLast-- -- ** Monadic indexing- , indexM, headM, lastM- , unsafeIndexM, unsafeHeadM, unsafeLastM-- -- ** Extracting subvectors (slicing)- , slice, init, tail, take, drop, splitAt- , unsafeSlice, unsafeInit, unsafeTail, unsafeTake, unsafeDrop-- -- * Construction-- -- ** Initialisation- , empty, singleton, replicate, generate, iterateN-- -- ** Monadic initialisation- , replicateM, generateM, create-- -- ** Unfolding- , unfoldr, unfoldrN- , constructN, constructrN-- -- -- ** Enumeration- -- , enumFromN, enumFromStepN, enumFromTo, enumFromThenTo-- -- ** Concatenation- , cons, snoc, (++), concat-- -- ** Restricting memory usage- , force-- -- * Modifying vectors-- -- ** Bulk updates- , (//)- , unsafeUpd- -- , update_, unsafeUpdate_-- -- ** Accumulations- , accum, unsafeAccum- -- , accumulate_, unsafeAccumulate_-- -- ** Permutations- , reverse- -- , backpermute, unsafeBackpermute-- -- ** Safe destructive updates- , modify-- -- * Elementwise operations-- -- ** Mapping- , map, imap, concatMap-- -- ** Monadic mapping- , mapM, mapM_, forM, forM_-- -- ** Zipping - Omitted due to me being lazy- -- , zipWith, zipWith3, zipWith4, zipWith5, zipWith6- -- , izipWith, izipWith3, izipWith4, izipWith5, izipWith6-- -- ** Monadic zipping- , zipWithM, zipWithM_-- -- * Working with predicates-- -- ** Filtering- , filter, ifilter, filterM- , takeWhile, dropWhile-- -- ** Partitioning- , partition, unstablePartition, span, break-- -- ** Searching- , elem, notElem, find, findIndex- , elemIndex- -- , findIndices, elemIndices-- -- * Folding- , foldl, foldl1, foldl', foldl1', foldr, foldr1, foldr', foldr1'- , ifoldl, ifoldl', ifoldr, ifoldr'-- -- ** Specialised folds- , all, any- -- , sum, product- , maximum, maximumBy, minimum, minimumBy- , minIndex, minIndexBy, maxIndex, maxIndexBy-- -- ** Monadic folds- , foldM, foldM', fold1M, fold1M'- , foldM_, foldM'_, fold1M_, fold1M'_-- -- * Prefix sums (scans)- , prescanl, prescanl'- , postscanl, postscanl'- , scanl, scanl', scanl1, scanl1'- , prescanr, prescanr'- , postscanr, postscanr'- , scanr, scanr', scanr1, scanr1'-- -- ** Lists- , toList, fromList, fromListN-- -- ** Other vector types- , G.convert-- -- ** Mutable vectors- , freeze, thaw, copy, unsafeFreeze, unsafeThaw, unsafeCopy- ) where--import Control.Monad.Primitive-import Control.Monad.ST-import Data.Vector.Vinyl.Default.Internal-import Data.Vinyl.Core-import Data.Vinyl.Functor (Identity(..))-import qualified Data.Vector.Generic as G-import Prelude hiding ( length, null,- replicate, (++), concat,- head, last,- init, tail, take, drop, splitAt, reverse,- map, concatMap,- zipWith, zipWith3, zip, zip3, unzip, unzip3,- filter, takeWhile, dropWhile, span, break,- elem, notElem,- foldl, foldl1, foldr, foldr1,- all, any, sum, product, minimum, maximum,- scanl, scanl1, scanr, scanr1,- enumFromTo, enumFromThenTo,- mapM, mapM_ )----- Length--- ---------- | /O(1)/ Yield the length of the vector.-length :: Vector (Rec Identity rs) -> Int-length (V i _) = i-{-# INLINE length #-}---- | /O(1)/ Test whether a vector if empty-null :: Vector (Rec Identity rs) -> Bool-null (V i _) = i == 0-{-# INLINE null #-}----- Indexing--- ------------ | O(1) Indexing-(!) :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Int -> Rec Identity rs-(!) = (G.!)-{-# INLINE (!) #-}---- | O(1) Safe indexing-(!?) :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Int -> Maybe (Rec Identity rs)-(!?) = (G.!?)-{-# INLINE (!?) #-}---- | /O(1)/ First element-head :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Rec Identity rs-head = G.head-{-# INLINE head #-}---- | /O(1)/ Last element-last :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Rec Identity rs-last = G.last-{-# INLINE last #-}----- | /O(1)/ Unsafe indexing without bounds checking-unsafeIndex :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Int -> Rec Identity rs-{-# INLINE unsafeIndex #-}-unsafeIndex = G.unsafeIndex---- | /O(1)/ First element without checking if the vector is empty-unsafeHead :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Rec Identity rs-{-# INLINE unsafeHead #-}-unsafeHead = G.unsafeHead---- | /O(1)/ Last element without checking if the vector is empty-unsafeLast :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Rec Identity rs-{-# INLINE unsafeLast #-}-unsafeLast = G.unsafeLast---- Monadic indexing--- -------------------- | /O(1)/ Indexing in a monad.------ The monad allows operations to be strict in the vector when necessary.--- Suppose vector copying is implemented like this:------ > copy mv v = ... write mv i (v ! i) ...------ For lazy vectors, @v ! i@ would not be evaluated which means that @mv@--- would unnecessarily retain a reference to @v@ in each element written.------ With 'indexM', copying can be implemented like this instead:------ > copy mv v = ... do--- > x <- indexM v i--- > write mv i x------ Here, no references to @v@ are retained because indexing (but /not/ the--- elements) is evaluated eagerly.----indexM :: (Monad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> Int -> m (Rec Identity rs)-indexM = G.indexM-{-# INLINE indexM #-}---- | /O(1)/ First element of a vector in a monad. See 'indexM' for an--- explanation of why this is useful.-headM :: (Monad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> m (Rec Identity rs)-headM = G.headM-{-# INLINE headM #-}---- | /O(1)/ Last element of a vector in a monad. See 'indexM' for an--- explanation of why this is useful.-lastM :: (Monad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> m (Rec Identity rs)-lastM = G.lastM-{-# INLINE lastM #-}---- | /O(1)/ Indexing in a monad without bounds checks. See 'indexM' for an--- explanation of why this is useful.-unsafeIndexM :: (Monad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> Int -> m (Rec Identity rs)-unsafeIndexM = G.unsafeIndexM-{-# INLINE unsafeIndexM #-}---- | /O(1)/ First element in a monad without checking for empty vectors.--- See 'indexM' for an explanation of why this is useful.-unsafeHeadM :: (Monad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> m (Rec Identity rs)-unsafeHeadM = G.unsafeHeadM-{-# INLINE unsafeHeadM #-}---- | /O(1)/ Last element in a monad without checking for empty vectors.--- See 'indexM' for an explanation of why this is useful.-unsafeLastM :: (Monad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> m (Rec Identity rs)-unsafeLastM = G.unsafeLastM-{-# INLINE unsafeLastM #-}---- Extracting subvectors (slicing)--- ----------------------------------- | /O(1)/ Yield a slice of the vector without copying it. The vector must--- contain at least @i+n@ elements.-slice :: G.Vector Vector (Rec Identity rs)- => Int -- ^ @i@ starting index- -> Int -- ^ @n@ length- -> Vector (Rec Identity rs)- -> Vector (Rec Identity rs)-slice = G.slice-{-# INLINE slice #-}---- | /O(1)/ Yield all but the last element without copying. The vector may not--- be empty.-init :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Vector (Rec Identity rs)-init = G.init-{-# INLINE init #-}---- | /O(1)/ Yield all but the first element without copying. The vector may not--- be empty.-tail :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Vector (Rec Identity rs)-tail = G.tail-{-# INLINE tail #-}---- | /O(1)/ Yield at the first @n@ elements without copying. The vector may--- contain less than @n@ elements in which case it is returned unchanged.-take :: G.Vector Vector (Rec Identity rs)- => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-take = G.take-{-# INLINE take #-}---- | /O(1)/ Yield all but the first @n@ elements without copying. The vector may--- contain less than @n@ elements in which case an empty vector is returned.-drop :: G.Vector Vector (Rec Identity rs)- => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-drop = G.drop-{-# INLINE drop #-}---- | /O(1)/ Yield the first @n@ elements paired with the remainder without copying.------ Note that @'splitAt' n v@ is equivalent to @('take' n v, 'drop' n v)@--- but slightly more efficient.-splitAt :: G.Vector Vector (Rec Identity rs)- => Int -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))-splitAt = G.splitAt-{-# INLINE splitAt #-}---- | /O(1)/ Yield a slice of the vector without copying. The vector must--- contain at least @i+n@ elements but this is not checked.-unsafeSlice :: G.Vector Vector (Rec Identity rs)- => Int -- ^ @i@ starting index- -> Int -- ^ @n@ length- -> Vector (Rec Identity rs)- -> Vector (Rec Identity rs)-unsafeSlice = G.unsafeSlice-{-# INLINE unsafeSlice #-}---- | /O(1)/ Yield all but the last element without copying. The vector may not--- be empty but this is not checked.-unsafeInit :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Vector (Rec Identity rs)-unsafeInit = G.unsafeInit-{-# INLINE unsafeInit #-}---- | /O(1)/ Yield all but the first element without copying. The vector may not--- be empty but this is not checked.-unsafeTail :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Vector (Rec Identity rs)-unsafeTail = G.unsafeTail-{-# INLINE unsafeTail #-}---- | /O(1)/ Yield the first @n@ elements without copying. The vector must--- contain at least @n@ elements but this is not checked.-unsafeTake :: G.Vector Vector (Rec Identity rs)- => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-unsafeTake = G.unsafeTake-{-# INLINE unsafeTake #-}---- | /O(1)/ Yield all but the first @n@ elements without copying. The vector--- must contain at least @n@ elements but this is not checked.-unsafeDrop :: G.Vector Vector (Rec Identity rs)- => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-unsafeDrop = G.unsafeDrop-{-# INLINE unsafeDrop #-}---- Initialisation--- ------------------ | /O(1)/ Empty vector-empty :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs)-empty = G.empty-{-# INLINE empty #-}---- | /O(1)/ Vector with exactly one element-singleton :: G.Vector Vector (Rec Identity rs)- => Rec Identity rs -> Vector (Rec Identity rs)-singleton = G.singleton-{-# INLINE singleton #-}---- | /O(n)/ Vector of the given length with the same value in each position-replicate :: G.Vector Vector (Rec Identity rs)- => Int -> Rec Identity rs -> Vector (Rec Identity rs)-replicate = G.replicate-{-# INLINE replicate #-}---- | /O(n)/ Construct a vector of the given length by applying the function to--- each index-generate :: G.Vector Vector (Rec Identity rs)- => Int -> (Int -> Rec Identity rs) -> Vector (Rec Identity rs)-generate = G.generate-{-# INLINE generate #-}---- | /O(n)/ Apply function n times to value. Zeroth element is original value.-iterateN :: G.Vector Vector (Rec Identity rs)- => Int -> (Rec Identity rs -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity rs)-iterateN = G.iterateN-{-# INLINE iterateN #-}---- Unfolding--- ------------- | /O(n)/ Construct a vector by repeatedly applying the generator function--- to a seed. The generator function yields 'Just' the next element and the--- new seed or 'Nothing' if there are no more elements.------ > unfoldr (\n -> if n == 0 then Nothing else Just (n,n-1)) 10--- > = <10,9,8,7,6,5,4,3,2,1>-unfoldr :: G.Vector Vector (Rec Identity rs)- => (c -> Maybe (Rec Identity rs, c)) -> c -> Vector (Rec Identity rs)-unfoldr = G.unfoldr-{-# INLINE unfoldr #-}---- | /O(n)/ Construct a vector with at most @n@ by repeatedly applying the--- generator function to the a seed. The generator function yields 'Just' the--- next element and the new seed or 'Nothing' if there are no more elements.------ > unfoldrN 3 (\n -> Just (n,n-1)) 10 = <10,9,8>-unfoldrN :: G.Vector Vector (Rec Identity rs)- => Int -> (c -> Maybe (Rec Identity rs, c)) -> c -> Vector (Rec Identity rs)-unfoldrN = G.unfoldrN-{-# INLINE unfoldrN #-}---- | /O(n)/ Construct a vector with @n@ elements by repeatedly applying the--- generator function to the already constructed part of the vector.------ > constructN 3 f = let a = f <> ; b = f <a> ; c = f <a,b> in f <a,b,c>----constructN :: G.Vector Vector (Rec Identity rs)- => Int -> (Vector (Rec Identity rs) -> Rec Identity rs) -> Vector (Rec Identity rs)-constructN = G.constructN-{-# INLINE constructN #-}---- | /O(n)/ Construct a vector with @n@ elements from right to left by--- repeatedly applying the generator function to the already constructed part--- of the vector.------ > constructrN 3 f = let a = f <> ; b = f<a> ; c = f <b,a> in f <c,b,a>----constructrN :: G.Vector Vector (Rec Identity rs)- => Int -> (Vector (Rec Identity rs) -> Rec Identity rs) -> Vector (Rec Identity rs)-constructrN = G.constructrN-{-# INLINE constructrN #-}---- Concatenation--- ----------------- | /O(n)/ Prepend an element-cons :: G.Vector Vector (Rec Identity rs)- => Rec Identity rs -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-{-# INLINE cons #-}-cons = G.cons---- | /O(n)/ Append an element-snoc :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity rs)-{-# INLINE snoc #-}-snoc = G.snoc--infixr 5 ++--- | /O(m+n)/ Concatenate two vectors-(++) :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-{-# INLINE (++) #-}-(++) = (G.++)---- | /O(n)/ Concatenate all vectors in the list-concat :: G.Vector Vector (Rec Identity rs)- => [Vector (Rec Identity rs)] -> Vector (Rec Identity rs)-{-# INLINE concat #-}-concat = G.concat---- Monadic initialisation--- -------------------------- | /O(n)/ Execute the monadic action the given number of times and store the--- results in a vector.-replicateM :: (Monad m, G.Vector Vector (Rec Identity rs))- => Int -> m (Rec Identity rs) -> m (Vector (Rec Identity rs))-replicateM = G.replicateM-{-# INLINE replicateM #-}---- | /O(n)/ Construct a vector of the given length by applying the monadic--- action to each index-generateM :: (Monad m, G.Vector Vector (Rec Identity rs))- => Int -> (Int -> m (Rec Identity rs)) -> m (Vector (Rec Identity rs))-generateM = G.generateM-{-# INLINE generateM #-}---- | Execute the monadic action and freeze the resulting vector.------ @--- create (do { v \<- new 2; write v 0 \'a\'; write v 1 \'b\'; return v }) = \<'a','b'\>--- @-create :: G.Vector Vector (Rec Identity rs)- => (forall s. ST s (G.Mutable Vector s (Rec Identity rs))) -> Vector (Rec Identity rs)--- NOTE: eta-expanded due to http://hackage.haskell.org/trac/ghc/ticket/4120-create p = G.create p-{-# INLINE create #-}---- Restricting memory usage--- ---------------------------- | /O(n)/ Yield the argument but force it not to retain any extra memory,--- possibly by copying it.------ This is especially useful when dealing with slices. For example:------ > force (slice 0 2 <huge vector>)------ Here, the slice retains a reference to the huge vector. Forcing it creates--- a copy of just the elements that belong to the slice and allows the huge--- vector to be garbage collected.-force :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Vector (Rec Identity rs)-force = G.force-{-# INLINE force #-}---- Bulk updates--- ---------------- | /O(m+n)/ For each pair @(i,a)@ from the list, replace the vector--- element at position @i@ by @a@.------ > <5,9,2,7> // [(2,1),(0,3),(2,8)] = <3,9,8,7>----(//) :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -- ^ initial vector (of length @m@)- -> [(Int, Rec Identity rs)] -- ^ list of index/value pairs (of length @n@)- -> Vector (Rec Identity rs)-(//) = (G.//)-{-# INLINE (//) #-}---- | Same as ('//') but without bounds checking.-unsafeUpd :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> [(Int, Rec Identity rs)] -> Vector (Rec Identity rs)-unsafeUpd = G.unsafeUpd-{-# INLINE unsafeUpd #-}---- Accumulations--- ----------------- | /O(m+n)/ For each pair @(i,c)@ from the list, replace the vector element--- @a@ at position @i@ by @f a c@.------ > accum (+) <5,9,2> [(2,4),(1,6),(0,3),(1,7)] = <5+3, 9+6+7, 2+4>-accum :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> c -> Rec Identity rs) -- ^ accumulating function @f@- -> Vector (Rec Identity rs) -- ^ initial vector (of length @m@)- -> [(Int,c)] -- ^ list of index/value pairs (of length @n@)- -> Vector (Rec Identity rs)-accum = G.accum-{-# INLINE accum #-}---- | Same as 'accum' but without bounds checking.-unsafeAccum :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> c -> Rec Identity rs) -> Vector (Rec Identity rs) -> [(Int,c)] -> Vector (Rec Identity rs)-unsafeAccum = G.unsafeAccum-{-# INLINE unsafeAccum #-}----- Permutations--- ---------------- | /O(n)/ Reverse a vector-reverse :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> Vector (Rec Identity rs)-{-# INLINE reverse #-}-reverse = G.reverse---- Safe destructive updates--- ---------------------------- | Apply a destructive operation to a vector. The operation will be--- performed in place if it is safe to do so and will modify a copy of the--- vector otherwise.------ @--- modify (\\v -> write v 0 \'x\') ('replicate' 3 \'a\') = \<\'x\',\'a\',\'a\'\>--- @-modify :: (G.Vector Vector (Rec Identity rs))- => (forall s. G.Mutable Vector s (Rec Identity rs) -> ST s ())- -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-{-# INLINE modify #-}-modify p = G.modify p---- Mapping--- ----------- | /O(n)/ Map a function over a vector-map :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-map = G.map-{-# INLINE map #-}---- | /O(n)/ Apply a function to every element of a vector and its index-imap :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Int -> Rec Identity rs -> Rec Identity ss)- -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-imap = G.imap-{-# INLINE imap #-}---- | Map a function over a vector and concatenate the results.-concatMap :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Vector (Rec Identity ss)) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-concatMap = G.concatMap-{-# INLINE concatMap #-}---- Monadic mapping--- ------------------- | /O(n)/ Apply the monadic action to all elements of the vector, yielding a--- vector of results-mapM :: (Monad m, G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> m (Rec Identity ss)) -> Vector (Rec Identity rs) -> m (Vector (Rec Identity ss))-mapM = G.mapM-{-# INLINE mapM #-}---- | /O(n)/ Apply the monadic action to all elements of a vector and ignore the--- results-mapM_ :: (Monad m, G.Vector Vector (Rec Identity rs))- => (Rec Identity rs -> m b) -> Vector (Rec Identity rs) -> m ()-mapM_ = G.mapM_-{-# INLINE mapM_ #-}---- | /O(n)/ Apply the monadic action to all elements of the vector, yielding a--- vector of results. Equvalent to @flip 'mapM'@.-forM :: (Monad m, G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => Vector (Rec Identity rs) -> (Rec Identity rs -> m (Rec Identity ss)) -> m (Vector (Rec Identity ss))-forM = G.forM-{-# INLINE forM #-}---- | /O(n)/ Apply the monadic action to all elements of a vector and ignore the--- results. Equivalent to @flip 'mapM_'@.-forM_ :: (Monad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> (Rec Identity rs -> m b) -> m ()-forM_ = G.forM_-{-# INLINE forM_ #-}---- Zipping--- ----------- -- | /O(min(m,n))/ Zip two vectors with the given function.--- zipWith :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- ) => ((a,a') -> (b,b') -> (c,c'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c')--- zipWith = G.zipWith--- {-# INLINE zipWith #-}--- --- -- | Zip three vectors with the given function.--- --- zipWith3 :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- , G.Vector u d, G.Vector v d'--- ) => ((a,a') -> (b,b') -> (c,c') -> (d, d'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d')--- zipWith3 = G.zipWith3--- {-# INLINE zipWith3 #-}--- --- zipWith4 :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- , G.Vector u d, G.Vector v d'--- , G.Vector u e, G.Vector v e'--- ) => ((a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e')--- zipWith4 = G.zipWith4--- {-# INLINE zipWith4 #-}--- --- zipWith5 :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- , G.Vector u d, G.Vector v d'--- , G.Vector u e, G.Vector v e'--- , G.Vector u f, G.Vector v f'--- ) => ((a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e') -> (f,f'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e') -> Vector u v (f,f')--- zipWith5 = G.zipWith5--- {-# INLINE zipWith5 #-}--- --- zipWith6 :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- , G.Vector u d, G.Vector v d'--- , G.Vector u e, G.Vector v e'--- , G.Vector u f, G.Vector v f'--- , G.Vector u g, G.Vector v g'--- ) => ((a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e') -> (f,f') -> (g,g'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e') -> Vector u v (f,f') -> Vector u v (g,g')--- zipWith6 = G.zipWith6--- {-# INLINE zipWith6 #-}--- --- -- | /O(min(m,n))/ Zip two vectors with a function that also takes the--- -- elements' indices.--- izipWith :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- ) => (Int -> (a,a') -> (b,b') -> (c,c'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c')--- izipWith = G.izipWith--- {-# INLINE izipWith #-}--- --- -- | Zip three vectors and their indices with the given function.--- izipWith3 :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- , G.Vector u d, G.Vector v d'--- ) => (Int -> (a,a') -> (b,b') -> (c,c') -> (d, d'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d')--- izipWith3 = G.izipWith3--- {-# INLINE izipWith3 #-}--- --- izipWith4 :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- , G.Vector u d, G.Vector v d'--- , G.Vector u e, G.Vector v e'--- ) => (Int -> (a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e')--- izipWith4 = G.izipWith4--- {-# INLINE izipWith4 #-}--- --- izipWith5 :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- , G.Vector u d, G.Vector v d'--- , G.Vector u e, G.Vector v e'--- , G.Vector u f, G.Vector v f'--- ) => (Int -> (a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e') -> (f,f'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e') -> Vector u v (f,f')--- izipWith5 = G.izipWith5--- {-# INLINE izipWith5 #-}--- --- izipWith6 :: ( G.Vector u a, G.Vector v a'--- , G.Vector u b, G.Vector v b'--- , G.Vector u c, G.Vector v c'--- , G.Vector u d, G.Vector v d'--- , G.Vector u e, G.Vector v e'--- , G.Vector u f, G.Vector v f'--- , G.Vector u g, G.Vector v g'--- ) => (Int -> (a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e') -> (f,f') -> (g,g'))--- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e') -> Vector u v (f,f') -> Vector u v (g,g')--- izipWith6 = G.izipWith6--- {-# INLINE izipWith6 #-}---- Monadic zipping--- ------------------- | /O(min(m,n))/ Zip the two vectors with the monadic action and yield a--- vector of results-zipWithM :: (Monad m, G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss), G.Vector Vector (Rec Identity ts))- => (Rec Identity rs -> Rec Identity ss -> m (Rec Identity ts)) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss) -> m (Vector (Rec Identity ts))-zipWithM = G.zipWithM-{-# INLINE zipWithM #-}---- | /O(min(m,n))/ Zip the two vectors with the monadic action and ignore the--- results-zipWithM_ :: (Monad m, G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> m e) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-> m ()-zipWithM_ = G.zipWithM_-{-# INLINE zipWithM_ #-}---- Filtering--- ------------- | /O(n)/ Drop elements that do not satisfy the predicate-filter :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-filter = G.filter-{-# INLINE filter #-}---- | /O(n)/ Drop elements that do not satisfy the predicate which is applied to--- values and their indices-ifilter :: G.Vector Vector (Rec Identity rs)- => (Int -> Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-ifilter = G.ifilter-{-# INLINE ifilter #-}---- | /O(n)/ Drop elements that do not satisfy the monadic predicate-filterM :: (Monad m, G.Vector Vector (Rec Identity rs))- => (Rec Identity rs -> m Bool) -> Vector (Rec Identity rs) -> m (Vector (Rec Identity rs))-filterM = G.filterM-{-# INLINE filterM #-}---- | /O(n)/ Yield the longest prefix of elements satisfying the predicate--- without copying.-takeWhile :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-takeWhile = G.takeWhile-{-# INLINE takeWhile #-}---- | /O(n)/ Drop the longest prefix of elements that satisfy the predicate--- without copying.-dropWhile :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-dropWhile = G.dropWhile-{-# INLINE dropWhile #-}----- Parititioning--- ----------------- | /O(n)/ Split the vector in two parts, the first one containing those--- elements that satisfy the predicate and the second one those that don't. The--- relative order of the elements is preserved at the cost of a sometimes--- reduced performance compared to 'unstablePartition'.-partition :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))-{-# INLINE partition #-}-partition = G.partition---- | /O(n)/ Split the vector in two parts, the first one containing those--- elements that satisfy the predicate and the second one those that don't.--- The order of the elements is not preserved but the operation is often--- faster than 'partition'.-unstablePartition :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))-{-# INLINE unstablePartition #-}-unstablePartition = G.unstablePartition---- | /O(n)/ Split the vector into the longest prefix of elements that satisfy--- the predicate and the rest without copying.-span :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))-{-# INLINE span #-}-span = G.span---- | /O(n)/ Split the vector into the longest prefix of elements that do not--- satisfy the predicate and the rest without copying.-break :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))-{-# INLINE break #-}-break = G.break---- Searching--- -----------infix 4 `elem`--- | /O(n)/ Check if the vector contains an element-elem :: (G.Vector Vector (Rec Identity rs), Eq (Rec Identity rs))- => Rec Identity rs -> Vector (Rec Identity rs) -> Bool-elem = G.elem-{-# INLINE elem #-}--infix 4 `notElem`--- | /O(n)/ Check if the vector does not contain an element (inverse of 'elem')-notElem :: (G.Vector Vector (Rec Identity rs), Eq (Rec Identity rs))- => Rec Identity rs -> Vector (Rec Identity rs) -> Bool-notElem = G.notElem-{-# INLINE notElem #-}---- | /O(n)/ Yield 'Just' the first element matching the predicate or 'Nothing'--- if no such element exists.-find :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Maybe (Rec Identity rs)-find = G.find-{-# INLINE find #-}---- | /O(n)/ Yield 'Just' the index of the first element matching the predicate--- or 'Nothing' if no such element exists.-findIndex :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Maybe Int-findIndex = G.findIndex-{-# INLINE findIndex #-}--{---- | /O(n)/ Yield the indices of elements satisfying the predicate in ascending--- order.-findIndices :: ((a, b) -> Bool) -> Vector (Rec Identity rs) -> Vector u v Int-findIndices = G.findIndices-{-# INLINE findIndices #-}--}---- | /O(n)/ Yield 'Just' the index of the first occurence of the given element or--- 'Nothing' if the vector does not contain the element. This is a specialised--- version of 'findIndex'.-elemIndex :: (G.Vector Vector (Rec Identity rs), Eq (Rec Identity rs))- => Rec Identity rs -> Vector (Rec Identity rs) -> Maybe Int-elemIndex = G.elemIndex-{-# INLINE elemIndex #-}--{---- | /O(n)/ Yield the indices of all occurences of the given element in--- ascending order. This is a specialised version of 'findIndices'.-elemIndices :: (a, b) -> Vector (Rec Identity rs) -> Vector Int-elemIndices = G.elemIndices-{-# INLINE elemIndices #-}--}---- Folding--- ----------- | /O(n)/ Left fold-foldl :: G.Vector Vector (Rec Identity rs)- => (r -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r-foldl = G.foldl-{-# INLINE foldl #-}---- | /O(n)/ Left fold on non-empty vectors-foldl1 :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs-foldl1 = G.foldl1-{-# INLINE foldl1 #-}---- | /O(n)/ Left fold with strict accumulator-foldl' :: G.Vector Vector (Rec Identity rs)- => (r -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r-foldl' = G.foldl'-{-# INLINE foldl' #-}---- | /O(n)/ Left fold on non-empty vectors with strict accumulator-foldl1' :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs-foldl1' = G.foldl1'-{-# INLINE foldl1' #-}---- | /O(n)/ Right fold-foldr :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r-foldr = G.foldr-{-# INLINE foldr #-}---- | /O(n)/ Right fold on non-empty vectors-foldr1 :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs-foldr1 = G.foldr1-{-# INLINE foldr1 #-}---- | /O(n)/ Right fold with a strict accumulator-foldr' :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r-foldr' = G.foldr'-{-# INLINE foldr' #-}---- | /O(n)/ Right fold on non-empty vectors with strict accumulator-foldr1' :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs-foldr1' = G.foldr1'-{-# INLINE foldr1' #-}---- | /O(n)/ Left fold (function applied to each element and its index)-ifoldl :: G.Vector Vector (Rec Identity rs)- => (r -> Int -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r-ifoldl = G.ifoldl-{-# INLINE ifoldl #-}---- | /O(n)/ Left fold with strict accumulator (function applied to each element--- and its index)-ifoldl' :: G.Vector Vector (Rec Identity rs)- => (r -> Int -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r-ifoldl' = G.ifoldl'-{-# INLINE ifoldl' #-}---- | /O(n)/ Right fold (function applied to each element and its index)-ifoldr :: G.Vector Vector (Rec Identity rs)- => (Int -> Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r-ifoldr = G.ifoldr-{-# INLINE ifoldr #-}---- | /O(n)/ Right fold with strict accumulator (function applied to each--- element and its index)-ifoldr' :: G.Vector Vector (Rec Identity rs)- => (Int -> Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r-ifoldr' = G.ifoldr'-{-# INLINE ifoldr' #-}---- Specialised folds--- --------------------- | /O(n)/ Check if all elements satisfy the predicate.-all :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Bool-{-# INLINE all #-}-all = G.all---- | /O(n)/ Check if any element satisfies the predicate.-any :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Bool-{-# INLINE any #-}-any = G.any--{---- | /O(n)/ Compute the sum of the elements-sum :: Vector (Rec Identity rs) -> (a, b)-{-# INLINE sum #-}-sum = G.sum---- | /O(n)/ Compute the product of the elements-product :: Vector (Rec Identity rs) -> (a, b)-{-# INLINE product #-}-product = G.product--}---- | /O(n)/ Yield the maximum element of the vector. The vector may not be--- empty.-maximum :: (G.Vector Vector (Rec Identity rs), Ord (Rec Identity rs))- => Vector (Rec Identity rs) -> Rec Identity rs-{-# INLINE maximum #-}-maximum = G.maximum---- | /O(n)/ Yield the maximum element of the vector according to the given--- comparison function. The vector may not be empty.-maximumBy :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Rec Identity rs-{-# INLINE maximumBy #-}-maximumBy = G.maximumBy---- | /O(n)/ Yield the minimum element of the vector. The vector may not be--- empty.-minimum :: (G.Vector Vector (Rec Identity rs), Ord (Rec Identity rs))- => Vector (Rec Identity rs) -> Rec Identity rs-{-# INLINE minimum #-}-minimum = G.minimum---- | /O(n)/ Yield the minimum element of the vector according to the given--- comparison function. The vector may not be empty.-minimumBy :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Rec Identity rs-{-# INLINE minimumBy #-}-minimumBy = G.minimumBy---- | /O(n)/ Yield the index of the maximum element of the vector. The vector--- may not be empty.-maxIndex :: (G.Vector Vector (Rec Identity rs), Ord (Rec Identity rs))- => Vector (Rec Identity rs) -> Int-{-# INLINE maxIndex #-}-maxIndex = G.maxIndex---- | /O(n)/ Yield the index of the maximum element of the vector according to--- the given comparison function. The vector may not be empty.-maxIndexBy :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Int-{-# INLINE maxIndexBy #-}-maxIndexBy = G.maxIndexBy---- | /O(n)/ Yield the index of the minimum element of the vector. The vector--- may not be empty.-minIndex :: (G.Vector Vector (Rec Identity rs), Ord (Rec Identity rs))- => Vector (Rec Identity rs) -> Int-{-# INLINE minIndex #-}-minIndex = G.minIndex---- | /O(n)/ Yield the index of the minimum element of the vector according to--- the given comparison function. The vector may not be empty.-minIndexBy :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Int-{-# INLINE minIndexBy #-}-minIndexBy = G.minIndexBy---- Monadic folds--- ----------------- | /O(n)/ Monadic fold-foldM :: (Monad m, G.Vector Vector (Rec Identity rs))- => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m r-foldM = G.foldM-{-# INLINE foldM #-}---- | /O(n)/ Monadic fold over non-empty vectors-fold1M :: (Monad m, G.Vector Vector (Rec Identity rs))- => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m (Rec Identity rs)-{-# INLINE fold1M #-}-fold1M = G.fold1M---- | /O(n)/ Monadic fold with strict accumulator-foldM' :: (Monad m, G.Vector Vector (Rec Identity rs))- => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m r-{-# INLINE foldM' #-}-foldM' = G.foldM'---- | /O(n)/ Monadic fold over non-empty vectors with strict accumulator-fold1M' :: (Monad m, G.Vector Vector (Rec Identity rs))- => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m (Rec Identity rs)-{-# INLINE fold1M' #-}-fold1M' = G.fold1M'---- | /O(n)/ Monadic fold that discards the result-foldM_ :: (Monad m, G.Vector Vector (Rec Identity rs))- => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m ()-{-# INLINE foldM_ #-}-foldM_ = G.foldM_---- | /O(n)/ Monadic fold over non-empty vectors that discards the result-fold1M_ :: (Monad m, G.Vector Vector (Rec Identity rs))- => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m ()-{-# INLINE fold1M_ #-}-fold1M_ = G.fold1M_---- | /O(n)/ Monadic fold with strict accumulator that discards the result-foldM'_ :: (Monad m, G.Vector Vector (Rec Identity rs))- => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m ()-{-# INLINE foldM'_ #-}-foldM'_ = G.foldM'_---- | /O(n)/ Monadic fold over non-empty vectors with strict accumulator--- that discards the result-fold1M'_ :: (Monad m, G.Vector Vector (Rec Identity rs))- => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m ()-{-# INLINE fold1M'_ #-}-fold1M'_ = G.fold1M'_----- Prefix sums (scans)--- ----------------------- | /O(n)/ Prescan------ @--- prescanl f z = 'init' . 'scanl' f z--- @------ Example: @prescanl (+) 0 \<1,2,3,4\> = \<0,1,3,6\>@----prescanl :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)-prescanl = G.prescanl-{-# INLINE prescanl #-}---- | /O(n)/ Prescan with strict accumulator-prescanl' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)-prescanl' = G.prescanl'-{-# INLINE prescanl' #-}---- | /O(n)/ Scan------ @--- postscanl f z = 'tail' . 'scanl' f z--- @------ Example: @postscanl (+) 0 \<1,2,3,4\> = \<1,3,6,10\>@----postscanl :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)-postscanl = G.postscanl-{-# INLINE postscanl #-}---- | /O(n)/ Scan with strict accumulator-postscanl' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)-postscanl' = G.postscanl'-{-# INLINE postscanl' #-}---- | /O(n)/ Haskell-style scan------ > scanl f z <x1,...,xn> = <y1,...,y(n+1)>--- > where y1 = z--- > yi = f y(i-1) x(i-1)------ Example: @scanl (+) 0 \<1,2,3,4\> = \<0,1,3,6,10\>@----scanl :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)-scanl = G.scanl-{-# INLINE scanl #-}---- | /O(n)/ Haskell-style scan with strict accumulator-scanl' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)-scanl' = G.scanl'-{-# INLINE scanl' #-}---- | /O(n)/ Scan over a non-empty vector------ > scanl f <x1,...,xn> = <y1,...,yn>--- > where y1 = x1--- > yi = f y(i-1) xi----scanl1 :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-scanl1 = G.scanl1-{-# INLINE scanl1 #-}---- | /O(n)/ Scan over a non-empty vector with a strict accumulator-scanl1' :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-scanl1' = G.scanl1'-{-# INLINE scanl1' #-}---- | /O(n)/ Right-to-left prescan------ @--- prescanr f z = 'reverse' . 'prescanl' (flip f) z . 'reverse'--- @----prescanr :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-{-# INLINE prescanr #-}-prescanr = G.prescanr---- | /O(n)/ Right-to-left prescan with strict accumulator-prescanr' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-prescanr' = G.prescanr'-{-# INLINE prescanr' #-}---- | /O(n)/ Right-to-left scan-postscanr :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-postscanr = G.postscanr-{-# INLINE postscanr #-}---- | /O(n)/ Right-to-left scan with strict accumulator-postscanr' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-postscanr' = G.postscanr'-{-# INLINE postscanr' #-}---- | /O(n)/ Right-to-left Haskell-style scan-scanr :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-scanr = G.scanr-{-# INLINE scanr #-}---- | /O(n)/ Right-to-left Haskell-style scan with strict accumulator-scanr' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))- => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-scanr' = G.scanr'-{-# INLINE scanr' #-}---- | /O(n)/ Right-to-left scan over a non-empty vector-scanr1 :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-{-# INLINE scanr1 #-}-scanr1 = G.scanr1---- | /O(n)/ Right-to-left scan over a non-empty vector with a strict--- accumulator-scanr1' :: G.Vector Vector (Rec Identity rs)- => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)-{-# INLINE scanr1' #-}-scanr1' = G.scanr1'---- | /O(n)/ Convert a vector to a list-toList :: G.Vector Vector (Rec Identity rs)- => Vector (Rec Identity rs) -> [Rec Identity rs]-toList = G.toList-{-# INLINE toList #-}---- | /O(n)/ Convert a list to a vector-fromList :: G.Vector Vector (Rec Identity rs)- => [Rec Identity rs] -> Vector (Rec Identity rs)-fromList = G.fromList-{-# INLINE fromList #-}---- | /O(n)/ Convert the first @n@ elements of a list to a vector------ @--- fromListN n xs = 'fromList' ('take' n xs)--- @-fromListN :: G.Vector Vector (Rec Identity rs)- => Int -> [Rec Identity rs] -> Vector (Rec Identity rs)-fromListN = G.fromListN-{-# INLINE fromListN #-}---- Conversions - Mutable vectors--- --------------------------------- | /O(1)/ Unsafe convert a mutable vector to an immutable one without--- copying. The mutable vector may not be used after this operation.-unsafeFreeze :: (PrimMonad m, G.Vector Vector (Rec Identity rs))- => G.Mutable Vector (PrimState m) (Rec Identity rs) -> m (Vector (Rec Identity rs))-unsafeFreeze = G.unsafeFreeze-{-# INLINE unsafeFreeze #-}---- | /O(1)/ Unsafely convert an immutable vector to a mutable one without--- copying. The immutable vector may not be used after this operation.-unsafeThaw :: (PrimMonad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> m (G.Mutable Vector (PrimState m) (Rec Identity rs))-unsafeThaw = G.unsafeThaw-{-# INLINE unsafeThaw #-}---- | /O(n)/ Yield a mutable copy of the immutable vector.-thaw :: (PrimMonad m, G.Vector Vector (Rec Identity rs))- => Vector (Rec Identity rs) -> m (G.Mutable Vector (PrimState m) (Rec Identity rs))-thaw = G.thaw-{-# INLINE thaw #-}---- | /O(n)/ Yield an immutable copy of the mutable vector.-freeze :: (PrimMonad m, G.Vector Vector (Rec Identity rs))- => G.Mutable Vector (PrimState m) (Rec Identity rs) -> m (Vector (Rec Identity rs))-freeze = G.freeze-{-# INLINE freeze #-}---- | /O(n)/ Copy an immutable vector into a mutable one. The two vectors must--- have the same length. This is not checked.-unsafeCopy :: (PrimMonad m, G.Vector Vector (Rec Identity rs))- => G.Mutable Vector (PrimState m) (Rec Identity rs) -> Vector (Rec Identity rs) -> m ()-unsafeCopy = G.unsafeCopy-{-# INLINE unsafeCopy #-}---- | /O(n)/ Copy an immutable vector into a mutable one. The two vectors must--- have the same length.-copy :: (PrimMonad m, G.Vector Vector (Rec Identity rs))- => G.Mutable Vector (PrimState m) (Rec Identity rs) -> Vector (Rec Identity rs) -> m ()-copy = G.copy-{-# INLINE copy #-}-
+ src/Data/Vector/Vinyl/Default/Empty/Monomorphic.hs view
@@ -0,0 +1,1313 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE Rank2Types #-}+-----------------------------------------------------------------------------+-- |+-- Copyright : Andrew Martin+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Andrew Martin <andrew.thaddeus@gmail.com>+-- Stability : experimental+-- Portability : non-portable+--+-- There are two vector types provided by this module: 'Vector' and+-- 'MVector'. They must be parameterized over a type that unifies+-- with 'Rec Identity rs'. An example would be:+--+-- > foo :: Vector (Rec Identity '[Int,Char,Bool])+-- +-- This vector stores records that have an 'Int', a 'Char', and a 'Bool'.+-----------------------------------------------------------------------------+module Data.Vector.Vinyl.Default.Empty.Monomorphic+ ( Vector, MVector++ -- * Accessors++ -- ** Length information+ , length, null++ -- ** Indexing+ , (!), (!?), head, last+ , unsafeIndex, unsafeHead, unsafeLast++ -- ** Monadic indexing+ , indexM, headM, lastM+ , unsafeIndexM, unsafeHeadM, unsafeLastM++ -- ** Extracting subvectors (slicing)+ , slice, init, tail, take, drop, splitAt+ , unsafeSlice, unsafeInit, unsafeTail, unsafeTake, unsafeDrop++ -- * Construction++ -- ** Initialisation+ , empty, singleton, replicate, generate, iterateN++ -- ** Monadic initialisation+ , replicateM, generateM, create++ -- ** Unfolding+ , unfoldr, unfoldrN+ , constructN, constructrN++ -- -- ** Enumeration+ -- , enumFromN, enumFromStepN, enumFromTo, enumFromThenTo++ -- ** Concatenation+ , cons, snoc, (++), concat++ -- ** Restricting memory usage+ , force++ -- * Modifying vectors++ -- ** Bulk updates+ , (//)+ , unsafeUpd+ -- , update_, unsafeUpdate_++ -- ** Accumulations+ , accum, unsafeAccum+ -- , accumulate_, unsafeAccumulate_++ -- ** Permutations+ , reverse+ -- , backpermute, unsafeBackpermute++ -- ** Safe destructive updates+ , modify++ -- * Elementwise operations++ -- ** Mapping+ , map, imap, concatMap++ -- ** Monadic mapping+ , mapM, mapM_, forM, forM_++ -- ** Zipping - Omitted due to me being lazy+ -- , zipWith, zipWith3, zipWith4, zipWith5, zipWith6+ -- , izipWith, izipWith3, izipWith4, izipWith5, izipWith6++ -- ** Monadic zipping+ , zipWithM, zipWithM_++ -- * Working with predicates++ -- ** Filtering+ , filter, ifilter, filterM+ , takeWhile, dropWhile++ -- ** Partitioning+ , partition, unstablePartition, span, break++ -- ** Searching+ , elem, notElem, find, findIndex+ , elemIndex+ -- , findIndices, elemIndices++ -- * Folding+ , foldl, foldl1, foldl', foldl1', foldr, foldr1, foldr', foldr1'+ , ifoldl, ifoldl', ifoldr, ifoldr'++ -- ** Specialised folds+ , all, any+ -- , sum, product+ , maximum, maximumBy, minimum, minimumBy+ , minIndex, minIndexBy, maxIndex, maxIndexBy++ -- ** Monadic folds+ , foldM, foldM', fold1M, fold1M'+ , foldM_, foldM'_, fold1M_, fold1M'_++ -- * Prefix sums (scans)+ , prescanl, prescanl'+ , postscanl, postscanl'+ , scanl, scanl', scanl1, scanl1'+ , prescanr, prescanr'+ , postscanr, postscanr'+ , scanr, scanr', scanr1, scanr1'++ -- ** Lists+ , toList, fromList, fromListN++ -- ** Other vector types+ , G.convert++ -- ** Mutable vectors+ , freeze, thaw, copy, unsafeFreeze, unsafeThaw, unsafeCopy+ ) where++import Control.Monad.Primitive+import Control.Monad.ST+import Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal+import Data.Vinyl.Core+import Data.Vinyl.Functor (Identity(..))+import qualified Data.Vector.Generic as G+import Prelude hiding ( length, null,+ replicate, (++), concat,+ head, last,+ init, tail, take, drop, splitAt, reverse,+ map, concatMap,+ zipWith, zipWith3, zip, zip3, unzip, unzip3,+ filter, takeWhile, dropWhile, span, break,+ elem, notElem,+ foldl, foldl1, foldr, foldr1,+ all, any, sum, product, minimum, maximum,+ scanl, scanl1, scanr, scanr1,+ enumFromTo, enumFromThenTo,+ mapM, mapM_ )+++-- Length+-- ------++-- | /O(1)/ Yield the length of the vector.+length :: Vector (Rec Identity rs) -> Int+length (V i _) = i+{-# INLINE length #-}++-- | /O(1)/ Test whether a vector if empty+null :: Vector (Rec Identity rs) -> Bool+null (V i _) = i == 0+{-# INLINE null #-}+++-- Indexing+-- --------++-- | O(1) Indexing+(!) :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Int -> Rec Identity rs+(!) = (G.!)+{-# INLINE (!) #-}++-- | O(1) Safe indexing+(!?) :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Int -> Maybe (Rec Identity rs)+(!?) = (G.!?)+{-# INLINE (!?) #-}++-- | /O(1)/ First element+head :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Rec Identity rs+head = G.head+{-# INLINE head #-}++-- | /O(1)/ Last element+last :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Rec Identity rs+last = G.last+{-# INLINE last #-}+++-- | /O(1)/ Unsafe indexing without bounds checking+unsafeIndex :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Int -> Rec Identity rs+{-# INLINE unsafeIndex #-}+unsafeIndex = G.unsafeIndex++-- | /O(1)/ First element without checking if the vector is empty+unsafeHead :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Rec Identity rs+{-# INLINE unsafeHead #-}+unsafeHead = G.unsafeHead++-- | /O(1)/ Last element without checking if the vector is empty+unsafeLast :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Rec Identity rs+{-# INLINE unsafeLast #-}+unsafeLast = G.unsafeLast++-- Monadic indexing+-- ----------------++-- | /O(1)/ Indexing in a monad.+--+-- The monad allows operations to be strict in the vector when necessary.+-- Suppose vector copying is implemented like this:+--+-- > copy mv v = ... write mv i (v ! i) ...+--+-- For lazy vectors, @v ! i@ would not be evaluated which means that @mv@+-- would unnecessarily retain a reference to @v@ in each element written.+--+-- With 'indexM', copying can be implemented like this instead:+--+-- > copy mv v = ... do+-- > x <- indexM v i+-- > write mv i x+--+-- Here, no references to @v@ are retained because indexing (but /not/ the+-- elements) is evaluated eagerly.+--+indexM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> Int -> m (Rec Identity rs)+indexM = G.indexM+{-# INLINE indexM #-}++-- | /O(1)/ First element of a vector in a monad. See 'indexM' for an+-- explanation of why this is useful.+headM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> m (Rec Identity rs)+headM = G.headM+{-# INLINE headM #-}++-- | /O(1)/ Last element of a vector in a monad. See 'indexM' for an+-- explanation of why this is useful.+lastM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> m (Rec Identity rs)+lastM = G.lastM+{-# INLINE lastM #-}++-- | /O(1)/ Indexing in a monad without bounds checks. See 'indexM' for an+-- explanation of why this is useful.+unsafeIndexM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> Int -> m (Rec Identity rs)+unsafeIndexM = G.unsafeIndexM+{-# INLINE unsafeIndexM #-}++-- | /O(1)/ First element in a monad without checking for empty vectors.+-- See 'indexM' for an explanation of why this is useful.+unsafeHeadM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> m (Rec Identity rs)+unsafeHeadM = G.unsafeHeadM+{-# INLINE unsafeHeadM #-}++-- | /O(1)/ Last element in a monad without checking for empty vectors.+-- See 'indexM' for an explanation of why this is useful.+unsafeLastM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> m (Rec Identity rs)+unsafeLastM = G.unsafeLastM+{-# INLINE unsafeLastM #-}++-- Extracting subvectors (slicing)+-- -------------------------------++-- | /O(1)/ Yield a slice of the vector without copying it. The vector must+-- contain at least @i+n@ elements.+slice :: G.Vector Vector (Rec Identity rs)+ => Int -- ^ @i@ starting index+ -> Int -- ^ @n@ length+ -> Vector (Rec Identity rs)+ -> Vector (Rec Identity rs)+slice = G.slice+{-# INLINE slice #-}++-- | /O(1)/ Yield all but the last element without copying. The vector may not+-- be empty.+init :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Vector (Rec Identity rs)+init = G.init+{-# INLINE init #-}++-- | /O(1)/ Yield all but the first element without copying. The vector may not+-- be empty.+tail :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Vector (Rec Identity rs)+tail = G.tail+{-# INLINE tail #-}++-- | /O(1)/ Yield at the first @n@ elements without copying. The vector may+-- contain less than @n@ elements in which case it is returned unchanged.+take :: G.Vector Vector (Rec Identity rs)+ => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+take = G.take+{-# INLINE take #-}++-- | /O(1)/ Yield all but the first @n@ elements without copying. The vector may+-- contain less than @n@ elements in which case an empty vector is returned.+drop :: G.Vector Vector (Rec Identity rs)+ => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+drop = G.drop+{-# INLINE drop #-}++-- | /O(1)/ Yield the first @n@ elements paired with the remainder without copying.+--+-- Note that @'splitAt' n v@ is equivalent to @('take' n v, 'drop' n v)@+-- but slightly more efficient.+splitAt :: G.Vector Vector (Rec Identity rs)+ => Int -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))+splitAt = G.splitAt+{-# INLINE splitAt #-}++-- | /O(1)/ Yield a slice of the vector without copying. The vector must+-- contain at least @i+n@ elements but this is not checked.+unsafeSlice :: G.Vector Vector (Rec Identity rs)+ => Int -- ^ @i@ starting index+ -> Int -- ^ @n@ length+ -> Vector (Rec Identity rs)+ -> Vector (Rec Identity rs)+unsafeSlice = G.unsafeSlice+{-# INLINE unsafeSlice #-}++-- | /O(1)/ Yield all but the last element without copying. The vector may not+-- be empty but this is not checked.+unsafeInit :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Vector (Rec Identity rs)+unsafeInit = G.unsafeInit+{-# INLINE unsafeInit #-}++-- | /O(1)/ Yield all but the first element without copying. The vector may not+-- be empty but this is not checked.+unsafeTail :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Vector (Rec Identity rs)+unsafeTail = G.unsafeTail+{-# INLINE unsafeTail #-}++-- | /O(1)/ Yield the first @n@ elements without copying. The vector must+-- contain at least @n@ elements but this is not checked.+unsafeTake :: G.Vector Vector (Rec Identity rs)+ => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+unsafeTake = G.unsafeTake+{-# INLINE unsafeTake #-}++-- | /O(1)/ Yield all but the first @n@ elements without copying. The vector+-- must contain at least @n@ elements but this is not checked.+unsafeDrop :: G.Vector Vector (Rec Identity rs)+ => Int -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+unsafeDrop = G.unsafeDrop+{-# INLINE unsafeDrop #-}++-- Initialisation+-- --------------++-- | /O(1)/ Empty vector+empty :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs)+empty = G.empty+{-# INLINE empty #-}++-- | /O(1)/ Vector with exactly one element+singleton :: G.Vector Vector (Rec Identity rs)+ => Rec Identity rs -> Vector (Rec Identity rs)+singleton = G.singleton+{-# INLINE singleton #-}++-- | /O(n)/ Vector of the given length with the same value in each position+replicate :: G.Vector Vector (Rec Identity rs)+ => Int -> Rec Identity rs -> Vector (Rec Identity rs)+replicate = G.replicate+{-# INLINE replicate #-}++-- | /O(n)/ Construct a vector of the given length by applying the function to+-- each index+generate :: G.Vector Vector (Rec Identity rs)+ => Int -> (Int -> Rec Identity rs) -> Vector (Rec Identity rs)+generate = G.generate+{-# INLINE generate #-}++-- | /O(n)/ Apply function n times to value. Zeroth element is original value.+iterateN :: G.Vector Vector (Rec Identity rs)+ => Int -> (Rec Identity rs -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity rs)+iterateN = G.iterateN+{-# INLINE iterateN #-}++-- Unfolding+-- ---------++-- | /O(n)/ Construct a vector by repeatedly applying the generator function+-- to a seed. The generator function yields 'Just' the next element and the+-- new seed or 'Nothing' if there are no more elements.+--+-- > unfoldr (\n -> if n == 0 then Nothing else Just (n,n-1)) 10+-- > = <10,9,8,7,6,5,4,3,2,1>+unfoldr :: G.Vector Vector (Rec Identity rs)+ => (c -> Maybe (Rec Identity rs, c)) -> c -> Vector (Rec Identity rs)+unfoldr = G.unfoldr+{-# INLINE unfoldr #-}++-- | /O(n)/ Construct a vector with at most @n@ by repeatedly applying the+-- generator function to the a seed. The generator function yields 'Just' the+-- next element and the new seed or 'Nothing' if there are no more elements.+--+-- > unfoldrN 3 (\n -> Just (n,n-1)) 10 = <10,9,8>+unfoldrN :: G.Vector Vector (Rec Identity rs)+ => Int -> (c -> Maybe (Rec Identity rs, c)) -> c -> Vector (Rec Identity rs)+unfoldrN = G.unfoldrN+{-# INLINE unfoldrN #-}++-- | /O(n)/ Construct a vector with @n@ elements by repeatedly applying the+-- generator function to the already constructed part of the vector.+--+-- > constructN 3 f = let a = f <> ; b = f <a> ; c = f <a,b> in f <a,b,c>+--+constructN :: G.Vector Vector (Rec Identity rs)+ => Int -> (Vector (Rec Identity rs) -> Rec Identity rs) -> Vector (Rec Identity rs)+constructN = G.constructN+{-# INLINE constructN #-}++-- | /O(n)/ Construct a vector with @n@ elements from right to left by+-- repeatedly applying the generator function to the already constructed part+-- of the vector.+--+-- > constructrN 3 f = let a = f <> ; b = f<a> ; c = f <b,a> in f <c,b,a>+--+constructrN :: G.Vector Vector (Rec Identity rs)+ => Int -> (Vector (Rec Identity rs) -> Rec Identity rs) -> Vector (Rec Identity rs)+constructrN = G.constructrN+{-# INLINE constructrN #-}++-- Concatenation+-- -------------++-- | /O(n)/ Prepend an element+cons :: G.Vector Vector (Rec Identity rs)+ => Rec Identity rs -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+{-# INLINE cons #-}+cons = G.cons++-- | /O(n)/ Append an element+snoc :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity rs)+{-# INLINE snoc #-}+snoc = G.snoc++infixr 5 +++-- | /O(m+n)/ Concatenate two vectors+(++) :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+{-# INLINE (++) #-}+(++) = (G.++)++-- | /O(n)/ Concatenate all vectors in the list+concat :: G.Vector Vector (Rec Identity rs)+ => [Vector (Rec Identity rs)] -> Vector (Rec Identity rs)+{-# INLINE concat #-}+concat = G.concat++-- Monadic initialisation+-- ----------------------++-- | /O(n)/ Execute the monadic action the given number of times and store the+-- results in a vector.+replicateM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Int -> m (Rec Identity rs) -> m (Vector (Rec Identity rs))+replicateM = G.replicateM+{-# INLINE replicateM #-}++-- | /O(n)/ Construct a vector of the given length by applying the monadic+-- action to each index+generateM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Int -> (Int -> m (Rec Identity rs)) -> m (Vector (Rec Identity rs))+generateM = G.generateM+{-# INLINE generateM #-}++-- | Execute the monadic action and freeze the resulting vector.+--+-- @+-- create (do { v \<- new 2; write v 0 \'a\'; write v 1 \'b\'; return v }) = \<'a','b'\>+-- @+create :: G.Vector Vector (Rec Identity rs)+ => (forall s. ST s (G.Mutable Vector s (Rec Identity rs))) -> Vector (Rec Identity rs)+-- NOTE: eta-expanded due to http://hackage.haskell.org/trac/ghc/ticket/4120+create p = G.create p+{-# INLINE create #-}++-- Restricting memory usage+-- ------------------------++-- | /O(n)/ Yield the argument but force it not to retain any extra memory,+-- possibly by copying it.+--+-- This is especially useful when dealing with slices. For example:+--+-- > force (slice 0 2 <huge vector>)+--+-- Here, the slice retains a reference to the huge vector. Forcing it creates+-- a copy of just the elements that belong to the slice and allows the huge+-- vector to be garbage collected.+force :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Vector (Rec Identity rs)+force = G.force+{-# INLINE force #-}++-- Bulk updates+-- ------------++-- | /O(m+n)/ For each pair @(i,a)@ from the list, replace the vector+-- element at position @i@ by @a@.+--+-- > <5,9,2,7> // [(2,1),(0,3),(2,8)] = <3,9,8,7>+--+(//) :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -- ^ initial vector (of length @m@)+ -> [(Int, Rec Identity rs)] -- ^ list of index/value pairs (of length @n@)+ -> Vector (Rec Identity rs)+(//) = (G.//)+{-# INLINE (//) #-}++-- | Same as ('//') but without bounds checking.+unsafeUpd :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> [(Int, Rec Identity rs)] -> Vector (Rec Identity rs)+unsafeUpd = G.unsafeUpd+{-# INLINE unsafeUpd #-}++-- Accumulations+-- -------------++-- | /O(m+n)/ For each pair @(i,c)@ from the list, replace the vector element+-- @a@ at position @i@ by @f a c@.+--+-- > accum (+) <5,9,2> [(2,4),(1,6),(0,3),(1,7)] = <5+3, 9+6+7, 2+4>+accum :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> c -> Rec Identity rs) -- ^ accumulating function @f@+ -> Vector (Rec Identity rs) -- ^ initial vector (of length @m@)+ -> [(Int,c)] -- ^ list of index/value pairs (of length @n@)+ -> Vector (Rec Identity rs)+accum = G.accum+{-# INLINE accum #-}++-- | Same as 'accum' but without bounds checking.+unsafeAccum :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> c -> Rec Identity rs) -> Vector (Rec Identity rs) -> [(Int,c)] -> Vector (Rec Identity rs)+unsafeAccum = G.unsafeAccum+{-# INLINE unsafeAccum #-}+++-- Permutations+-- ------------++-- | /O(n)/ Reverse a vector+reverse :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> Vector (Rec Identity rs)+{-# INLINE reverse #-}+reverse = G.reverse++-- Safe destructive updates+-- ------------------------++-- | Apply a destructive operation to a vector. The operation will be+-- performed in place if it is safe to do so and will modify a copy of the+-- vector otherwise.+--+-- @+-- modify (\\v -> write v 0 \'x\') ('replicate' 3 \'a\') = \<\'x\',\'a\',\'a\'\>+-- @+modify :: (G.Vector Vector (Rec Identity rs))+ => (forall s. G.Mutable Vector s (Rec Identity rs) -> ST s ())+ -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+{-# INLINE modify #-}+modify p = G.modify p++-- Mapping+-- -------++-- | /O(n)/ Map a function over a vector+map :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+map = G.map+{-# INLINE map #-}++-- | /O(n)/ Apply a function to every element of a vector and its index+imap :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Int -> Rec Identity rs -> Rec Identity ss)+ -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+imap = G.imap+{-# INLINE imap #-}++-- | Map a function over a vector and concatenate the results.+concatMap :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Vector (Rec Identity ss)) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+concatMap = G.concatMap+{-# INLINE concatMap #-}++-- Monadic mapping+-- ---------------++-- | /O(n)/ Apply the monadic action to all elements of the vector, yielding a+-- vector of results+mapM :: (Monad m, G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> m (Rec Identity ss)) -> Vector (Rec Identity rs) -> m (Vector (Rec Identity ss))+mapM = G.mapM+{-# INLINE mapM #-}++-- | /O(n)/ Apply the monadic action to all elements of a vector and ignore the+-- results+mapM_ :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (Rec Identity rs -> m b) -> Vector (Rec Identity rs) -> m ()+mapM_ = G.mapM_+{-# INLINE mapM_ #-}++-- | /O(n)/ Apply the monadic action to all elements of the vector, yielding a+-- vector of results. Equvalent to @flip 'mapM'@.+forM :: (Monad m, G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => Vector (Rec Identity rs) -> (Rec Identity rs -> m (Rec Identity ss)) -> m (Vector (Rec Identity ss))+forM = G.forM+{-# INLINE forM #-}++-- | /O(n)/ Apply the monadic action to all elements of a vector and ignore the+-- results. Equivalent to @flip 'mapM_'@.+forM_ :: (Monad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> (Rec Identity rs -> m b) -> m ()+forM_ = G.forM_+{-# INLINE forM_ #-}++-- Zipping+-- -------++-- -- | /O(min(m,n))/ Zip two vectors with the given function.+-- zipWith :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- ) => ((a,a') -> (b,b') -> (c,c'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c')+-- zipWith = G.zipWith+-- {-# INLINE zipWith #-}+-- +-- -- | Zip three vectors with the given function.+-- +-- zipWith3 :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- , G.Vector u d, G.Vector v d'+-- ) => ((a,a') -> (b,b') -> (c,c') -> (d, d'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d')+-- zipWith3 = G.zipWith3+-- {-# INLINE zipWith3 #-}+-- +-- zipWith4 :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- , G.Vector u d, G.Vector v d'+-- , G.Vector u e, G.Vector v e'+-- ) => ((a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e')+-- zipWith4 = G.zipWith4+-- {-# INLINE zipWith4 #-}+-- +-- zipWith5 :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- , G.Vector u d, G.Vector v d'+-- , G.Vector u e, G.Vector v e'+-- , G.Vector u f, G.Vector v f'+-- ) => ((a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e') -> (f,f'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e') -> Vector u v (f,f')+-- zipWith5 = G.zipWith5+-- {-# INLINE zipWith5 #-}+-- +-- zipWith6 :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- , G.Vector u d, G.Vector v d'+-- , G.Vector u e, G.Vector v e'+-- , G.Vector u f, G.Vector v f'+-- , G.Vector u g, G.Vector v g'+-- ) => ((a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e') -> (f,f') -> (g,g'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e') -> Vector u v (f,f') -> Vector u v (g,g')+-- zipWith6 = G.zipWith6+-- {-# INLINE zipWith6 #-}+-- +-- -- | /O(min(m,n))/ Zip two vectors with a function that also takes the+-- -- elements' indices.+-- izipWith :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- ) => (Int -> (a,a') -> (b,b') -> (c,c'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c')+-- izipWith = G.izipWith+-- {-# INLINE izipWith #-}+-- +-- -- | Zip three vectors and their indices with the given function.+-- izipWith3 :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- , G.Vector u d, G.Vector v d'+-- ) => (Int -> (a,a') -> (b,b') -> (c,c') -> (d, d'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d')+-- izipWith3 = G.izipWith3+-- {-# INLINE izipWith3 #-}+-- +-- izipWith4 :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- , G.Vector u d, G.Vector v d'+-- , G.Vector u e, G.Vector v e'+-- ) => (Int -> (a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e')+-- izipWith4 = G.izipWith4+-- {-# INLINE izipWith4 #-}+-- +-- izipWith5 :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- , G.Vector u d, G.Vector v d'+-- , G.Vector u e, G.Vector v e'+-- , G.Vector u f, G.Vector v f'+-- ) => (Int -> (a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e') -> (f,f'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e') -> Vector u v (f,f')+-- izipWith5 = G.izipWith5+-- {-# INLINE izipWith5 #-}+-- +-- izipWith6 :: ( G.Vector u a, G.Vector v a'+-- , G.Vector u b, G.Vector v b'+-- , G.Vector u c, G.Vector v c'+-- , G.Vector u d, G.Vector v d'+-- , G.Vector u e, G.Vector v e'+-- , G.Vector u f, G.Vector v f'+-- , G.Vector u g, G.Vector v g'+-- ) => (Int -> (a,a') -> (b,b') -> (c,c') -> (d, d') -> (e,e') -> (f,f') -> (g,g'))+-- -> Vector u v (a,a') -> Vector u v (b,b') -> Vector u v (c,c') -> Vector u v (d,d') -> Vector u v (e,e') -> Vector u v (f,f') -> Vector u v (g,g')+-- izipWith6 = G.izipWith6+-- {-# INLINE izipWith6 #-}++-- Monadic zipping+-- ---------------++-- | /O(min(m,n))/ Zip the two vectors with the monadic action and yield a+-- vector of results+zipWithM :: (Monad m, G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss), G.Vector Vector (Rec Identity ts))+ => (Rec Identity rs -> Rec Identity ss -> m (Rec Identity ts)) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss) -> m (Vector (Rec Identity ts))+zipWithM = G.zipWithM+{-# INLINE zipWithM #-}++-- | /O(min(m,n))/ Zip the two vectors with the monadic action and ignore the+-- results+zipWithM_ :: (Monad m, G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> m e) -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)-> m ()+zipWithM_ = G.zipWithM_+{-# INLINE zipWithM_ #-}++-- Filtering+-- ---------++-- | /O(n)/ Drop elements that do not satisfy the predicate+filter :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+filter = G.filter+{-# INLINE filter #-}++-- | /O(n)/ Drop elements that do not satisfy the predicate which is applied to+-- values and their indices+ifilter :: G.Vector Vector (Rec Identity rs)+ => (Int -> Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+ifilter = G.ifilter+{-# INLINE ifilter #-}++-- | /O(n)/ Drop elements that do not satisfy the monadic predicate+filterM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (Rec Identity rs -> m Bool) -> Vector (Rec Identity rs) -> m (Vector (Rec Identity rs))+filterM = G.filterM+{-# INLINE filterM #-}++-- | /O(n)/ Yield the longest prefix of elements satisfying the predicate+-- without copying.+takeWhile :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+takeWhile = G.takeWhile+{-# INLINE takeWhile #-}++-- | /O(n)/ Drop the longest prefix of elements that satisfy the predicate+-- without copying.+dropWhile :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+dropWhile = G.dropWhile+{-# INLINE dropWhile #-}+++-- Parititioning+-- -------------++-- | /O(n)/ Split the vector in two parts, the first one containing those+-- elements that satisfy the predicate and the second one those that don't. The+-- relative order of the elements is preserved at the cost of a sometimes+-- reduced performance compared to 'unstablePartition'.+partition :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))+{-# INLINE partition #-}+partition = G.partition++-- | /O(n)/ Split the vector in two parts, the first one containing those+-- elements that satisfy the predicate and the second one those that don't.+-- The order of the elements is not preserved but the operation is often+-- faster than 'partition'.+unstablePartition :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))+{-# INLINE unstablePartition #-}+unstablePartition = G.unstablePartition++-- | /O(n)/ Split the vector into the longest prefix of elements that satisfy+-- the predicate and the rest without copying.+span :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))+{-# INLINE span #-}+span = G.span++-- | /O(n)/ Split the vector into the longest prefix of elements that do not+-- satisfy the predicate and the rest without copying.+break :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> (Vector (Rec Identity rs), Vector (Rec Identity rs))+{-# INLINE break #-}+break = G.break++-- Searching+-- ---------++infix 4 `elem`+-- | /O(n)/ Check if the vector contains an element+elem :: (G.Vector Vector (Rec Identity rs), Eq (Rec Identity rs))+ => Rec Identity rs -> Vector (Rec Identity rs) -> Bool+elem = G.elem+{-# INLINE elem #-}++infix 4 `notElem`+-- | /O(n)/ Check if the vector does not contain an element (inverse of 'elem')+notElem :: (G.Vector Vector (Rec Identity rs), Eq (Rec Identity rs))+ => Rec Identity rs -> Vector (Rec Identity rs) -> Bool+notElem = G.notElem+{-# INLINE notElem #-}++-- | /O(n)/ Yield 'Just' the first element matching the predicate or 'Nothing'+-- if no such element exists.+find :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Maybe (Rec Identity rs)+find = G.find+{-# INLINE find #-}++-- | /O(n)/ Yield 'Just' the index of the first element matching the predicate+-- or 'Nothing' if no such element exists.+findIndex :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Maybe Int+findIndex = G.findIndex+{-# INLINE findIndex #-}++{-+-- | /O(n)/ Yield the indices of elements satisfying the predicate in ascending+-- order.+findIndices :: ((a, b) -> Bool) -> Vector (Rec Identity rs) -> Vector u v Int+findIndices = G.findIndices+{-# INLINE findIndices #-}+-}++-- | /O(n)/ Yield 'Just' the index of the first occurence of the given element or+-- 'Nothing' if the vector does not contain the element. This is a specialised+-- version of 'findIndex'.+elemIndex :: (G.Vector Vector (Rec Identity rs), Eq (Rec Identity rs))+ => Rec Identity rs -> Vector (Rec Identity rs) -> Maybe Int+elemIndex = G.elemIndex+{-# INLINE elemIndex #-}++{-+-- | /O(n)/ Yield the indices of all occurences of the given element in+-- ascending order. This is a specialised version of 'findIndices'.+elemIndices :: (a, b) -> Vector (Rec Identity rs) -> Vector Int+elemIndices = G.elemIndices+{-# INLINE elemIndices #-}+-}++-- Folding+-- -------++-- | /O(n)/ Left fold+foldl :: G.Vector Vector (Rec Identity rs)+ => (r -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r+foldl = G.foldl+{-# INLINE foldl #-}++-- | /O(n)/ Left fold on non-empty vectors+foldl1 :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs+foldl1 = G.foldl1+{-# INLINE foldl1 #-}++-- | /O(n)/ Left fold with strict accumulator+foldl' :: G.Vector Vector (Rec Identity rs)+ => (r -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r+foldl' = G.foldl'+{-# INLINE foldl' #-}++-- | /O(n)/ Left fold on non-empty vectors with strict accumulator+foldl1' :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs+foldl1' = G.foldl1'+{-# INLINE foldl1' #-}++-- | /O(n)/ Right fold+foldr :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r+foldr = G.foldr+{-# INLINE foldr #-}++-- | /O(n)/ Right fold on non-empty vectors+foldr1 :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs+foldr1 = G.foldr1+{-# INLINE foldr1 #-}++-- | /O(n)/ Right fold with a strict accumulator+foldr' :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r+foldr' = G.foldr'+{-# INLINE foldr' #-}++-- | /O(n)/ Right fold on non-empty vectors with strict accumulator+foldr1' :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Rec Identity rs+foldr1' = G.foldr1'+{-# INLINE foldr1' #-}++-- | /O(n)/ Left fold (function applied to each element and its index)+ifoldl :: G.Vector Vector (Rec Identity rs)+ => (r -> Int -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r+ifoldl = G.ifoldl+{-# INLINE ifoldl #-}++-- | /O(n)/ Left fold with strict accumulator (function applied to each element+-- and its index)+ifoldl' :: G.Vector Vector (Rec Identity rs)+ => (r -> Int -> Rec Identity rs -> r) -> r -> Vector (Rec Identity rs) -> r+ifoldl' = G.ifoldl'+{-# INLINE ifoldl' #-}++-- | /O(n)/ Right fold (function applied to each element and its index)+ifoldr :: G.Vector Vector (Rec Identity rs)+ => (Int -> Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r+ifoldr = G.ifoldr+{-# INLINE ifoldr #-}++-- | /O(n)/ Right fold with strict accumulator (function applied to each+-- element and its index)+ifoldr' :: G.Vector Vector (Rec Identity rs)+ => (Int -> Rec Identity rs -> r -> r) -> r -> Vector (Rec Identity rs) -> r+ifoldr' = G.ifoldr'+{-# INLINE ifoldr' #-}++-- Specialised folds+-- -----------------++-- | /O(n)/ Check if all elements satisfy the predicate.+all :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Bool+{-# INLINE all #-}+all = G.all++-- | /O(n)/ Check if any element satisfies the predicate.+any :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Bool) -> Vector (Rec Identity rs) -> Bool+{-# INLINE any #-}+any = G.any++{-+-- | /O(n)/ Compute the sum of the elements+sum :: Vector (Rec Identity rs) -> (a, b)+{-# INLINE sum #-}+sum = G.sum++-- | /O(n)/ Compute the product of the elements+product :: Vector (Rec Identity rs) -> (a, b)+{-# INLINE product #-}+product = G.product+-}++-- | /O(n)/ Yield the maximum element of the vector. The vector may not be+-- empty.+maximum :: (G.Vector Vector (Rec Identity rs), Ord (Rec Identity rs))+ => Vector (Rec Identity rs) -> Rec Identity rs+{-# INLINE maximum #-}+maximum = G.maximum++-- | /O(n)/ Yield the maximum element of the vector according to the given+-- comparison function. The vector may not be empty.+maximumBy :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Rec Identity rs+{-# INLINE maximumBy #-}+maximumBy = G.maximumBy++-- | /O(n)/ Yield the minimum element of the vector. The vector may not be+-- empty.+minimum :: (G.Vector Vector (Rec Identity rs), Ord (Rec Identity rs))+ => Vector (Rec Identity rs) -> Rec Identity rs+{-# INLINE minimum #-}+minimum = G.minimum++-- | /O(n)/ Yield the minimum element of the vector according to the given+-- comparison function. The vector may not be empty.+minimumBy :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Rec Identity rs+{-# INLINE minimumBy #-}+minimumBy = G.minimumBy++-- | /O(n)/ Yield the index of the maximum element of the vector. The vector+-- may not be empty.+maxIndex :: (G.Vector Vector (Rec Identity rs), Ord (Rec Identity rs))+ => Vector (Rec Identity rs) -> Int+{-# INLINE maxIndex #-}+maxIndex = G.maxIndex++-- | /O(n)/ Yield the index of the maximum element of the vector according to+-- the given comparison function. The vector may not be empty.+maxIndexBy :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Int+{-# INLINE maxIndexBy #-}+maxIndexBy = G.maxIndexBy++-- | /O(n)/ Yield the index of the minimum element of the vector. The vector+-- may not be empty.+minIndex :: (G.Vector Vector (Rec Identity rs), Ord (Rec Identity rs))+ => Vector (Rec Identity rs) -> Int+{-# INLINE minIndex #-}+minIndex = G.minIndex++-- | /O(n)/ Yield the index of the minimum element of the vector according to+-- the given comparison function. The vector may not be empty.+minIndexBy :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Ordering) -> Vector (Rec Identity rs) -> Int+{-# INLINE minIndexBy #-}+minIndexBy = G.minIndexBy++-- Monadic folds+-- -------------++-- | /O(n)/ Monadic fold+foldM :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m r+foldM = G.foldM+{-# INLINE foldM #-}++-- | /O(n)/ Monadic fold over non-empty vectors+fold1M :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m (Rec Identity rs)+{-# INLINE fold1M #-}+fold1M = G.fold1M++-- | /O(n)/ Monadic fold with strict accumulator+foldM' :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m r+{-# INLINE foldM' #-}+foldM' = G.foldM'++-- | /O(n)/ Monadic fold over non-empty vectors with strict accumulator+fold1M' :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m (Rec Identity rs)+{-# INLINE fold1M' #-}+fold1M' = G.fold1M'++-- | /O(n)/ Monadic fold that discards the result+foldM_ :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m ()+{-# INLINE foldM_ #-}+foldM_ = G.foldM_++-- | /O(n)/ Monadic fold over non-empty vectors that discards the result+fold1M_ :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m ()+{-# INLINE fold1M_ #-}+fold1M_ = G.fold1M_++-- | /O(n)/ Monadic fold with strict accumulator that discards the result+foldM'_ :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (r -> Rec Identity rs -> m r) -> r -> Vector (Rec Identity rs) -> m ()+{-# INLINE foldM'_ #-}+foldM'_ = G.foldM'_++-- | /O(n)/ Monadic fold over non-empty vectors with strict accumulator+-- that discards the result+fold1M'_ :: (Monad m, G.Vector Vector (Rec Identity rs))+ => (Rec Identity rs -> Rec Identity rs -> m (Rec Identity rs)) -> Vector (Rec Identity rs) -> m ()+{-# INLINE fold1M'_ #-}+fold1M'_ = G.fold1M'_+++-- Prefix sums (scans)+-- -------------------++-- | /O(n)/ Prescan+--+-- @+-- prescanl f z = 'init' . 'scanl' f z+-- @+--+-- Example: @prescanl (+) 0 \<1,2,3,4\> = \<0,1,3,6\>@+--+prescanl :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)+prescanl = G.prescanl+{-# INLINE prescanl #-}++-- | /O(n)/ Prescan with strict accumulator+prescanl' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)+prescanl' = G.prescanl'+{-# INLINE prescanl' #-}++-- | /O(n)/ Scan+--+-- @+-- postscanl f z = 'tail' . 'scanl' f z+-- @+--+-- Example: @postscanl (+) 0 \<1,2,3,4\> = \<1,3,6,10\>@+--+postscanl :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)+postscanl = G.postscanl+{-# INLINE postscanl #-}++-- | /O(n)/ Scan with strict accumulator+postscanl' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)+postscanl' = G.postscanl'+{-# INLINE postscanl' #-}++-- | /O(n)/ Haskell-style scan+--+-- > scanl f z <x1,...,xn> = <y1,...,y(n+1)>+-- > where y1 = z+-- > yi = f y(i-1) x(i-1)+--+-- Example: @scanl (+) 0 \<1,2,3,4\> = \<0,1,3,6,10\>@+--+scanl :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)+scanl = G.scanl+{-# INLINE scanl #-}++-- | /O(n)/ Haskell-style scan with strict accumulator+scanl' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity rs) -> Rec Identity rs -> Vector (Rec Identity ss) -> Vector (Rec Identity rs)+scanl' = G.scanl'+{-# INLINE scanl' #-}++-- | /O(n)/ Scan over a non-empty vector+--+-- > scanl f <x1,...,xn> = <y1,...,yn>+-- > where y1 = x1+-- > yi = f y(i-1) xi+--+scanl1 :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+scanl1 = G.scanl1+{-# INLINE scanl1 #-}++-- | /O(n)/ Scan over a non-empty vector with a strict accumulator+scanl1' :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+scanl1' = G.scanl1'+{-# INLINE scanl1' #-}++-- | /O(n)/ Right-to-left prescan+--+-- @+-- prescanr f z = 'reverse' . 'prescanl' (flip f) z . 'reverse'+-- @+--+prescanr :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+{-# INLINE prescanr #-}+prescanr = G.prescanr++-- | /O(n)/ Right-to-left prescan with strict accumulator+prescanr' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+prescanr' = G.prescanr'+{-# INLINE prescanr' #-}++-- | /O(n)/ Right-to-left scan+postscanr :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+postscanr = G.postscanr+{-# INLINE postscanr #-}++-- | /O(n)/ Right-to-left scan with strict accumulator+postscanr' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+postscanr' = G.postscanr'+{-# INLINE postscanr' #-}++-- | /O(n)/ Right-to-left Haskell-style scan+scanr :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+scanr = G.scanr+{-# INLINE scanr #-}++-- | /O(n)/ Right-to-left Haskell-style scan with strict accumulator+scanr' :: (G.Vector Vector (Rec Identity rs), G.Vector Vector (Rec Identity ss))+ => (Rec Identity rs -> Rec Identity ss -> Rec Identity ss) -> Rec Identity ss -> Vector (Rec Identity rs) -> Vector (Rec Identity ss)+scanr' = G.scanr'+{-# INLINE scanr' #-}++-- | /O(n)/ Right-to-left scan over a non-empty vector+scanr1 :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+{-# INLINE scanr1 #-}+scanr1 = G.scanr1++-- | /O(n)/ Right-to-left scan over a non-empty vector with a strict+-- accumulator+scanr1' :: G.Vector Vector (Rec Identity rs)+ => (Rec Identity rs -> Rec Identity rs -> Rec Identity rs) -> Vector (Rec Identity rs) -> Vector (Rec Identity rs)+{-# INLINE scanr1' #-}+scanr1' = G.scanr1'++-- | /O(n)/ Convert a vector to a list+toList :: G.Vector Vector (Rec Identity rs)+ => Vector (Rec Identity rs) -> [Rec Identity rs]+toList = G.toList+{-# INLINE toList #-}++-- | /O(n)/ Convert a list to a vector+fromList :: G.Vector Vector (Rec Identity rs)+ => [Rec Identity rs] -> Vector (Rec Identity rs)+fromList = G.fromList+{-# INLINE fromList #-}++-- | /O(n)/ Convert the first @n@ elements of a list to a vector+--+-- @+-- fromListN n xs = 'fromList' ('take' n xs)+-- @+fromListN :: G.Vector Vector (Rec Identity rs)+ => Int -> [Rec Identity rs] -> Vector (Rec Identity rs)+fromListN = G.fromListN+{-# INLINE fromListN #-}++-- Conversions - Mutable vectors+-- -----------------------------++-- | /O(1)/ Unsafe convert a mutable vector to an immutable one without+-- copying. The mutable vector may not be used after this operation.+unsafeFreeze :: (PrimMonad m, G.Vector Vector (Rec Identity rs))+ => G.Mutable Vector (PrimState m) (Rec Identity rs) -> m (Vector (Rec Identity rs))+unsafeFreeze = G.unsafeFreeze+{-# INLINE unsafeFreeze #-}++-- | /O(1)/ Unsafely convert an immutable vector to a mutable one without+-- copying. The immutable vector may not be used after this operation.+unsafeThaw :: (PrimMonad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> m (G.Mutable Vector (PrimState m) (Rec Identity rs))+unsafeThaw = G.unsafeThaw+{-# INLINE unsafeThaw #-}++-- | /O(n)/ Yield a mutable copy of the immutable vector.+thaw :: (PrimMonad m, G.Vector Vector (Rec Identity rs))+ => Vector (Rec Identity rs) -> m (G.Mutable Vector (PrimState m) (Rec Identity rs))+thaw = G.thaw+{-# INLINE thaw #-}++-- | /O(n)/ Yield an immutable copy of the mutable vector.+freeze :: (PrimMonad m, G.Vector Vector (Rec Identity rs))+ => G.Mutable Vector (PrimState m) (Rec Identity rs) -> m (Vector (Rec Identity rs))+freeze = G.freeze+{-# INLINE freeze #-}++-- | /O(n)/ Copy an immutable vector into a mutable one. The two vectors must+-- have the same length. This is not checked.+unsafeCopy :: (PrimMonad m, G.Vector Vector (Rec Identity rs))+ => G.Mutable Vector (PrimState m) (Rec Identity rs) -> Vector (Rec Identity rs) -> m ()+unsafeCopy = G.unsafeCopy+{-# INLINE unsafeCopy #-}++-- | /O(n)/ Copy an immutable vector into a mutable one. The two vectors must+-- have the same length.+copy :: (PrimMonad m, G.Vector Vector (Rec Identity rs))+ => G.Mutable Vector (PrimState m) (Rec Identity rs) -> Vector (Rec Identity rs) -> m ()+copy = G.copy+{-# INLINE copy #-}+
+ src/Data/Vector/Vinyl/Default/Empty/Monomorphic/Implication.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE GADTs #-}++-----------------------------------------------------------------------------+-- |+-- Copyright : Andrew Martin+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Andrew Martin <andrew.thaddeus@gmail.com>+-- Stability : experimental+-- Portability : non-portable+--+-- This module uses the "constraints" package to prove that if all of the+-- columns satisfy the 'HasDefaultVector' constraint, then a vector +-- parameterized over the record has an instance of the generic vector +-- typeclass.+-----------------------------------------------------------------------------+module Data.Vector.Vinyl.Default.Empty.Monomorphic.Implication where++import Data.Constraint+import Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal+import Data.Vinyl.Core (Rec(..))+import Data.Vinyl.Functor (Identity(..))+import Data.Vector.Vinyl.TypeLevel (ListAll)++import qualified Data.Vector.Generic.Mutable as GM+import qualified Data.Vector.Generic as G++listAllVector :: Rec proxy rs + -> ListAll rs HasDefaultVector :- G.Vector Vector (Rec Identity rs)+listAllVector RNil = Sub Dict+listAllVector (_ :& rs) = Sub $ case listAllVector rs of+ Sub Dict -> Dict++listAllMVector :: Rec proxy rs + -> ListAll rs HasDefaultVector :- GM.MVector MVector (Rec Identity rs)+listAllMVector RNil = Sub Dict+listAllMVector (_ :& rs) = Sub $ case listAllMVector rs of+ Sub Dict -> Dict++-- listAllVectorBoth :: Rec proxy rs +-- -> ListAll rs HasDefaultVector :- (GM.MVector MVector (Rec Identity rs), G.Vector Vector (Rec Identity rs))+-- listAllVectorBoth RNil = Sub Dict+-- listAllVectorBoth (_ :& rs) = Sub $ case listAllVectorBoth rs of+-- Sub Dict -> Dict+
+ src/Data/Vector/Vinyl/Default/Empty/Monomorphic/Internal.hs view
@@ -0,0 +1,231 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE InstanceSigs #-}++#ifndef MIN_VERSION_vector+#define MIN_VERSION_vector(x,y,z) 1+#endif++module Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal+ ( MVector(..)+ , Vector(..)+ , HasDefaultVector(..)+ ) where++import Control.Monad+import Data.Monoid+import Data.Typeable (Typeable)+import GHC.Exts (Constraint)+import Control.Monad.Primitive (PrimMonad,PrimState)+import qualified Data.Vector.Generic.Mutable as GM+import qualified Data.Vector.Generic as G++#if MIN_VERSION_vector(0,11,0)+import Data.Vector.Fusion.Bundle as Stream+#else+import Data.Vector.Fusion.Stream as Stream+#endif++import Prelude hiding ( length, null, replicate, reverse, map, read, take, drop, init, tail )+import Text.Read+import Data.Proxy++import Data.Vinyl.Core(Rec(..))+import Data.Vinyl.Functor (Identity(..))+import Data.Vector.Vinyl.Default.Types (VectorVal(..),MVectorVal(..),HasDefaultVector(..))++data MVector :: * -> * -> * where+ MV :: !Int -> !(Rec (MVectorVal s) rs) -> MVector s (Rec Identity rs)+ deriving Typeable++instance GM.MVector MVector (Rec Identity '[]) where+ basicLength (MV i _) = i+ {-# INLINE basicLength #-}+ basicUnsafeSlice _ _ v = v+ {-# INLINE basicUnsafeSlice #-}+ basicOverlaps _ _ = False+ {-# INLINE basicOverlaps #-}+ basicUnsafeNew n = return (MV n RNil)+ {-# INLINE basicUnsafeNew #-}+ basicUnsafeReplicate n _ = return (MV n RNil)+ {-# INLINE basicUnsafeReplicate #-}+ basicUnsafeRead _ _ = return RNil+ {-# INLINE basicUnsafeRead #-}+ basicUnsafeWrite _ _ _ = return ()+ {-# INLINE basicUnsafeWrite #-}+ basicClear _ = return ()+ {-# INLINE basicClear #-}+ basicSet _ _ = return ()+ {-# INLINE basicSet #-}+ basicUnsafeCopy _ _ = return ()+ {-# INLINE basicUnsafeCopy #-}+ basicUnsafeMove _ _ = return ()+ {-# INLINE basicUnsafeMove #-}+ basicUnsafeGrow (MV i _) n = return (MV (i + n) RNil)+ {-# INLINE basicUnsafeGrow #-}+#if MIN_VERSION_vector(0,11,0)+ basicInitialize _ = return ()+ {-# INLINE basicInitialize #-}+#endif+ ++instance ( GM.MVector MVector (Rec Identity rs)+ , HasDefaultVector r+ )+ => GM.MVector MVector (Rec Identity (r ': rs)) where+ basicLength (MV i _) = i+ {-# INLINE basicLength #-}++ basicUnsafeSlice s e (MV i (MVectorVal v :& rs)) = case GM.basicUnsafeSlice s e (MV i rs) of+ MV _ rsNext -> MV e (MVectorVal (GM.basicUnsafeSlice s e v) :& rsNext)+ {-# INLINE basicUnsafeSlice #-}++ basicOverlaps (MV i (MVectorVal a :& as)) (MV j (MVectorVal b :& bs)) = + GM.basicOverlaps a b || GM.basicOverlaps (MV i as) (MV j bs)+ {-# INLINE basicOverlaps #-}++ basicUnsafeNew :: forall m. PrimMonad m => Int -> m (MVector (PrimState m) (Rec Identity (r ': rs)))+ basicUnsafeNew n = + consVec (Proxy :: Proxy m) n <$> GM.basicUnsafeNew n <*> GM.basicUnsafeNew n+ {-# INLINE basicUnsafeNew #-}+ + basicUnsafeReplicate :: forall m. PrimMonad m => Int -> Rec Identity (r ': rs) -> m (MVector (PrimState m) (Rec Identity (r ': rs)))+ basicUnsafeReplicate n (Identity v :& rs) = + consVec (Proxy :: Proxy m) n <$> GM.basicUnsafeReplicate n v <*> GM.basicUnsafeReplicate n rs+ {-# INLINE basicUnsafeReplicate #-}++ basicUnsafeRead (MV i (MVectorVal v :& rs)) n = do+ r <- GM.basicUnsafeRead v n+ rs <- GM.basicUnsafeRead (MV i rs) n+ return (Identity r :& rs)+ {-# INLINE basicUnsafeRead #-}++ basicUnsafeWrite (MV i (MVectorVal v :& vrs)) n (Identity r :& rs) = do+ GM.basicUnsafeWrite v n r+ GM.basicUnsafeWrite (MV i vrs) n rs+ {-# INLINE basicUnsafeWrite #-}++ basicClear (MV i (MVectorVal v :& vrs)) = do+ GM.basicClear v+ GM.basicClear (MV i vrs)+ {-# INLINE basicClear #-}++ basicSet (MV i (MVectorVal v :& vrs)) (Identity r :& rs) = do+ GM.basicSet v r+ GM.basicSet (MV i vrs) rs+ {-# INLINE basicSet #-}++ basicUnsafeCopy (MV i (MVectorVal a :& as)) (MV j (MVectorVal b :& bs)) = do+ GM.basicUnsafeCopy a b+ GM.basicUnsafeCopy (MV i as) (MV j bs)+ {-# INLINE basicUnsafeCopy #-}++ basicUnsafeMove (MV i (MVectorVal a :& as)) (MV j (MVectorVal b :& bs)) = do+ GM.basicUnsafeMove a b+ GM.basicUnsafeMove (MV i as) (MV j bs)+ {-# INLINE basicUnsafeMove #-}++ basicUnsafeGrow :: forall m. PrimMonad m => MVector (PrimState m) (Rec Identity (r ': rs)) -> Int -> m (MVector (PrimState m) (Rec Identity (r ': rs)))+ basicUnsafeGrow (MV i (MVectorVal v :& vrs)) n = do+ r <- GM.basicUnsafeGrow v n+ rs <- GM.basicUnsafeGrow (MV i vrs) n+ return (MV (i + n) (MVectorVal r :& stripMV (Proxy :: Proxy m) rs))+ {-# INLINE basicUnsafeGrow #-}++#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV i (MVectorVal v :& rs)) = do+ GM.basicInitialize v+ GM.basicInitialize (MV i rs)+ {-# INLINE basicInitialize #-}+#endif++data Vector :: * -> * where+ V :: !Int -> !(Rec VectorVal rs) -> Vector (Rec Identity rs)+ deriving Typeable++type instance G.Mutable Vector = MVector ++instance G.Vector Vector (Rec Identity '[]) where+ basicUnsafeFreeze (MV n _) = return (V n RNil)+ {-# INLINE basicUnsafeFreeze #-}+ basicUnsafeThaw (V i _) = return (MV i RNil)+ {-# INLINE basicUnsafeThaw #-}+ basicLength (V i _) = i+ {-# INLINE basicLength #-}+ basicUnsafeSlice _ e _ = V e RNil+ {-# INLINE basicUnsafeSlice #-}+ basicUnsafeIndexM _ n = return RNil+ {-# INLINE basicUnsafeIndexM #-}+ basicUnsafeCopy _ _ = return ()+ {-# INLINE basicUnsafeCopy #-}+ elemseq _ RNil b = b+ {-# INLINE elemseq #-}++instance ( G.Vector Vector (Rec Identity rs)+ , HasDefaultVector r+ )+ => G.Vector Vector (Rec Identity (r ': rs)) where+ basicUnsafeFreeze (MV i (MVectorVal v :& vrs)) = do+ r <- G.basicUnsafeFreeze v+ rs <- G.basicUnsafeFreeze (MV i vrs)+ return (V i (VectorVal r :& stripV rs))+ {-# INLINE basicUnsafeFreeze #-}++ basicUnsafeThaw :: forall m. PrimMonad m => Vector (Rec Identity (r ': rs)) -> m (G.Mutable Vector (PrimState m) (Rec Identity (r ': rs)))+ basicUnsafeThaw (V i (VectorVal v :& vrs)) = do+ r <- G.basicUnsafeThaw v+ rs <- G.basicUnsafeThaw (V i vrs)+ return (MV i (MVectorVal r :& stripMV (Proxy :: Proxy m) rs))+ {-# INLINE basicUnsafeThaw #-}++ basicLength (V i _) = i+ {-# INLINE basicLength #-}++ basicUnsafeSlice s e (V i (VectorVal v :& rs)) = case G.basicUnsafeSlice s e (V i rs) of+ V _ rsNext -> V e (VectorVal (G.basicUnsafeSlice s e v) :& rsNext)+ {-# INLINE basicUnsafeSlice #-}++ basicUnsafeIndexM (V i (VectorVal v :& vrs)) n = do+ r <- G.basicUnsafeIndexM v n+ rs <- G.basicUnsafeIndexM (V i vrs) n+ return (Identity r :& rs)+ {-# INLINE basicUnsafeIndexM #-}++ basicUnsafeCopy (MV i (MVectorVal m :& mrs)) (V j (VectorVal v :& vrs)) = do+ G.basicUnsafeCopy m v+ G.basicUnsafeCopy (MV i mrs) (V j vrs)+ {-# INLINE basicUnsafeCopy #-}++ elemseq (V i (VectorVal v :& vrs)) (Identity a :& rs) b = G.elemseq v a (G.elemseq (V i vrs) rs b)+ {-# INLINE elemseq #-}+ +-----------------------------------------+-- Helper functions for instance methods+-----------------------------------------+consVec :: Proxy m+ -> Int + -> G.Mutable (DefaultVector r) (PrimState m) r + -> MVector (PrimState m) (Rec Identity rs)+ -> MVector (PrimState m) (Rec Identity (r ': rs))+consVec _ n v (MV _ rs) = MV n (MVectorVal v :& rs)+{-# INLINE consVec #-}++stripMV :: Proxy m -> MVector (PrimState m) (Rec Identity rs) -> Rec (MVectorVal (PrimState m)) rs+stripMV _ (MV _ rs) = rs+{-# INLINE stripMV #-}++stripV :: Vector (Rec Identity rs) -> Rec VectorVal rs+stripV (V _ rs) = rs+{-# INLINE stripV #-}
+ src/Data/Vector/Vinyl/Default/Empty/Monomorphic/Mutable.hs view
@@ -0,0 +1,283 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GADTs #-}++-- |+-- Module : Data.Vector.Vinyl.Default.Mutable+-- Copyright : Andrew Martin+-- License : BSD-style+--+-- Maintainer : Andrew Martin <andrew.thaddeus@gmail.com>+-- Stability : experimental+-- Portability : non-portable+--+-- Vectors for vinyl records+--++module Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable (+ -- * Mutable vectors of primitive types+ MVector(..), ++ -- * Accessors++ -- ** Length information+ length, null,++ -- ** Extracting subvectors+ slice, init, tail, take, drop, splitAt,+ unsafeSlice, unsafeInit, unsafeTail, unsafeTake, unsafeDrop,++ -- ** Overlapping+ overlaps,++ -- * Construction++ -- ** Initialisation+ new, unsafeNew, replicate, replicateM, clone,++ -- ** Growing+ grow, unsafeGrow,++ -- ** Restricting memory usage+ clear,++ -- * Zipping and unzipping - Omitting for now++ -- * Accessing individual elements+ read, write, swap,+ unsafeRead, unsafeWrite, unsafeSwap,++ -- * Modifying vectors++ -- ** Filling and copying+ set, copy, move, unsafeCopy, unsafeMove+) where++import Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal+import qualified Data.Vector.Generic.Mutable as G+import Data.Vector.Fusion.Util ( delayed_min )+import Control.Monad.Primitive+import Data.Vinyl.Core (Rec)+import Data.Vinyl.Functor (Identity)++import Prelude hiding ( length, null, replicate, reverse, map, read,+ take, drop, splitAt, init, tail,+ zip, zip3, unzip, unzip3 )++-- Length information+-- ------------------++-- | Length of the mutable vector.+length :: MVector s (Rec Identity rs) -> Int+{-# INLINE length #-}+length (MV i _) = i++-- | Check whether the vector is empty+null :: MVector s (Rec Identity rs) -> Bool+{-# INLINE null #-}+null (MV i _) = i == 0++-- Extracting subvectors+-- ---------------------++-- | Yield a part of the mutable vector without copying it.+slice :: G.MVector MVector (Rec Identity rs) => Int -> Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE slice #-}+slice = G.slice++take :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE take #-}+take = G.take++drop :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE drop #-}+drop = G.drop++splitAt :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> (MVector s (Rec Identity rs), MVector s (Rec Identity rs))+{-# INLINE splitAt #-}+splitAt = G.splitAt++init :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE init #-}+init = G.init++tail :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE tail #-}+tail = G.tail++-- | Yield a part of the mutable vector without copying it. No bounds checks+-- are performed.+unsafeSlice :: G.MVector MVector (Rec Identity rs)+ => Int -- ^ starting index+ -> Int -- ^ length of the slice+ -> MVector s (Rec Identity rs)+ -> MVector s (Rec Identity rs)+{-# INLINE unsafeSlice #-}+unsafeSlice = G.unsafeSlice++unsafeTake :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE unsafeTake #-}+unsafeTake = G.unsafeTake++unsafeDrop :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE unsafeDrop #-}+unsafeDrop = G.unsafeDrop++unsafeInit :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE unsafeInit #-}+unsafeInit = G.unsafeInit++unsafeTail :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)+{-# INLINE unsafeTail #-}+unsafeTail = G.unsafeTail++-- Overlapping+-- -----------++-- | Check whether two vectors overlap.+overlaps :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs) -> Bool+{-# INLINE overlaps #-}+overlaps = G.overlaps++-- Initialisation+-- --------------++-- | Create a mutable vector of the given length.+new :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => Int -> m (MVector (PrimState m) (Rec Identity rs))+{-# INLINE new #-}+new = G.new++-- | Create a mutable vector of the given length. The length is not checked.+unsafeNew :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => Int -> m (MVector (PrimState m) (Rec Identity rs))+{-# INLINE unsafeNew #-}+unsafeNew = G.unsafeNew++-- | Create a mutable vector of the given length (0 if the length is negative)+-- and fill it with an initial value.+replicate :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => Int -> (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))+{-# INLINE replicate #-}+replicate = G.replicate++-- | Create a mutable vector of the given length (0 if the length is negative)+-- and fill it with values produced by repeatedly executing the monadic action.+replicateM :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => Int -> m (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))+{-# INLINE replicateM #-}+replicateM = G.replicateM++-- | Create a copy of a mutable vector.+clone :: (PrimMonad m, G.MVector MVector (Rec Identity rs))+ => MVector (PrimState m) (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))+{-# INLINE clone #-}+clone = G.clone++-- Growing+-- -------++-- | Grow a vector by the given number of elements. The number must be+-- positive.+grow :: (PrimMonad m, G.MVector MVector (Rec Identity rs))+ => MVector (PrimState m) (Rec Identity rs) -> Int -> m (MVector (PrimState m) (Rec Identity rs))+{-# INLINE grow #-}+grow = G.grow++-- | Grow a vector by the given number of elements. The number must be+-- positive but this is not checked.+unsafeGrow :: (PrimMonad m, G.MVector MVector (Rec Identity rs))+ => MVector (PrimState m) (Rec Identity rs) -> Int -> m (MVector (PrimState m) (Rec Identity rs))+{-# INLINE unsafeGrow #-}+unsafeGrow = G.unsafeGrow++-- Restricting memory usage+-- ------------------------++-- | Reset all elements of the vector to some undefined value, clearing all+-- references to external objects. This is usually a noop for unboxed vectors.+clear :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> m ()+{-# INLINE clear #-}+clear = G.clear++-- Accessing individual elements+-- -----------------------------++-- | Yield the element at the given position.+read :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (Rec Identity rs)+{-# INLINE read #-}+read = G.read++-- | Replace the element at the given position.+write :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> (Rec Identity rs) -> m ()+{-# INLINE write #-}+write = G.write++-- | Swap the elements at the given positions.+swap :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> Int -> m ()+{-# INLINE swap #-}+swap = G.swap+++-- | Yield the element at the given position. No bounds checks are performed.+unsafeRead :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (Rec Identity rs)+{-# INLINE unsafeRead #-}+unsafeRead = G.unsafeRead++-- | Replace the element at the given position. No bounds checks are performed.+unsafeWrite+ :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> (Rec Identity rs) -> m ()+{-# INLINE unsafeWrite #-}+unsafeWrite = G.unsafeWrite++-- | Swap the elements at the given positions. No bounds checks are performed.+unsafeSwap+ :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> Int -> m ()+{-# INLINE unsafeSwap #-}+unsafeSwap = G.unsafeSwap++-- Filling and copying+-- -------------------++-- | Set all elements of the vector to the given value.+set :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> (Rec Identity rs) -> m ()+{-# INLINE set #-}+set = G.set++-- | Copy a vector. The two vectors must have the same length and may not+-- overlap.+copy :: (PrimMonad m, G.MVector MVector (Rec Identity rs))+ => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()+{-# INLINE copy #-}+copy = G.copy++-- | Copy a vector. The two vectors must have the same length and may not+-- overlap. This is not checked.+unsafeCopy :: (PrimMonad m, G.MVector MVector (Rec Identity rs))+ => MVector (PrimState m) (Rec Identity rs) -- ^ target+ -> MVector (PrimState m) (Rec Identity rs) -- ^ source+ -> m ()+{-# INLINE unsafeCopy #-}+unsafeCopy = G.unsafeCopy++-- | Move the contents of a vector. The two vectors must have the same+-- length.+--+-- If the vectors do not overlap, then this is equivalent to 'copy'.+-- Otherwise, the copying is performed as if the source vector were+-- copied to a temporary vector and then the temporary vector was copied+-- to the target vector.+move :: (PrimMonad m, G.MVector MVector (Rec Identity rs))+ => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()+{-# INLINE move #-}+move = G.move++-- | Move the contents of a vector. The two vectors must have the same+-- length, but this is not checked.+--+-- If the vectors do not overlap, then this is equivalent to 'unsafeCopy'.+-- Otherwise, the copying is performed as if the source vector were+-- copied to a temporary vector and then the temporary vector was copied+-- to the target vector.+unsafeMove :: (PrimMonad m, G.MVector MVector (Rec Identity rs))+ => MVector (PrimState m) (Rec Identity rs) -- ^ target+ -> MVector (PrimState m) (Rec Identity rs) -- ^ source+ -> m ()+{-# INLINE unsafeMove #-}+unsafeMove = G.unsafeMove+
− src/Data/Vector/Vinyl/Default/Implication.hs
@@ -1,46 +0,0 @@-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE GADTs #-}---------------------------------------------------------------------------------- |--- Copyright : Andrew Martin--- License : BSD-style (see the file LICENSE)------ Maintainer : Andrew Martin <andrew.thaddeus@gmail.com>--- Stability : experimental--- Portability : non-portable------ This module uses the "constraints" package to prove that if all of the--- columns satisfy the 'HasDefaultVector' constraint, then a vector --- parameterized over the record has an instance of the generic vector --- typeclass.-------------------------------------------------------------------------------module Data.Vector.Vinyl.Default.Implication where--import Data.Constraint-import Data.Vector.Vinyl.Default.Internal-import Data.Vinyl.Core (Rec(..))-import Data.Vinyl.Functor (Identity(..))-import Data.Vector.Vinyl.TypeLevel (ListAll)--import qualified Data.Vector.Generic.Mutable as GM-import qualified Data.Vector.Generic as G--listAllVector :: Rec proxy rs - -> ListAll rs HasDefaultVector :- G.Vector Vector (Rec Identity rs)-listAllVector RNil = Sub Dict-listAllVector (_ :& rs) = Sub $ case listAllVector rs of- Sub Dict -> Dict--listAllMVector :: Rec proxy rs - -> ListAll rs HasDefaultVector :- GM.MVector MVector (Rec Identity rs)-listAllMVector RNil = Sub Dict-listAllMVector (_ :& rs) = Sub $ case listAllMVector rs of- Sub Dict -> Dict---- listAllVectorBoth :: Rec proxy rs --- -> ListAll rs HasDefaultVector :- (GM.MVector MVector (Rec Identity rs), G.Vector Vector (Rec Identity rs))--- listAllVectorBoth RNil = Sub Dict--- listAllVectorBoth (_ :& rs) = Sub $ case listAllVectorBoth rs of--- Sub Dict -> Dict-
− src/Data/Vector/Vinyl/Default/Internal.hs
@@ -1,263 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE KindSignatures #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE InstanceSigs #-}--#ifndef MIN_VERSION_vector-#define MIN_VERSION_vector(x,y,z) 1-#endif--module Data.Vector.Vinyl.Default.Internal- ( MVector(..)- , MVectorVal(..)- , Vector(..)- , HasDefaultVector(..)- ) where--import Control.Monad-import Data.Monoid-import Data.Typeable (Typeable)-import GHC.Exts (Constraint)-import Control.Monad.Primitive (PrimMonad,PrimState)-import qualified Data.Vector.Generic.Mutable as GM-import qualified Data.Vector.Generic as G-import qualified Data.Vector as B-import qualified Data.Vector.Unboxed as U--#if MIN_VERSION_vector(0,11,0)-import Data.Vector.Fusion.Bundle as Stream-#else-import Data.Vector.Fusion.Stream as Stream-#endif--import Prelude hiding ( length, null, replicate, reverse, map, read, take, drop, init, tail )-import Text.Read-import Data.Proxy--import Data.Vinyl.Core(Rec(..))-import Data.Vinyl.Functor (Identity(..))-import qualified Data.Text as Text-import qualified Data.Text.Lazy as LText---- | The most efficient vector type for each column data type.-class ( GM.MVector (G.Mutable (DefaultVector t)) t- , G.Vector (DefaultVector t) t- ) => HasDefaultVector t where- type DefaultVector t :: * -> *--instance HasDefaultVector Int where- type DefaultVector Int = U.Vector-instance HasDefaultVector Char where- type DefaultVector Char = U.Vector-instance HasDefaultVector Bool where- type DefaultVector Bool = U.Vector-instance HasDefaultVector Float where- type DefaultVector Float = U.Vector-instance HasDefaultVector Double where- type DefaultVector Double = U.Vector-instance HasDefaultVector Text.Text where- type DefaultVector Text.Text = B.Vector-instance HasDefaultVector LText.Text where- type DefaultVector LText.Text = B.Vector-instance G.Vector Vector (Rec Identity rs)- => HasDefaultVector (Rec Identity rs) where- type DefaultVector (Rec Identity rs) = Vector--newtype MVectorVal s t = MVectorVal { getMVectorVal :: G.Mutable (DefaultVector t) s t }--data MVector :: * -> * -> * where- MV :: !Int -> !(Rec (MVectorVal s) rs) -> MVector s (Rec Identity rs)- deriving Typeable--instance GM.MVector MVector (Rec Identity '[]) where- basicLength (MV i _) = i- {-# INLINE basicLength #-}- basicUnsafeSlice _ _ v = v- {-# INLINE basicUnsafeSlice #-}- basicOverlaps _ _ = False- {-# INLINE basicOverlaps #-}- basicUnsafeNew n = return (MV n RNil)- {-# INLINE basicUnsafeNew #-}- basicUnsafeReplicate n _ = return (MV n RNil)- {-# INLINE basicUnsafeReplicate #-}- basicUnsafeRead _ _ = return RNil- {-# INLINE basicUnsafeRead #-}- basicUnsafeWrite _ _ _ = return ()- {-# INLINE basicUnsafeWrite #-}- basicClear _ = return ()- {-# INLINE basicClear #-}- basicSet _ _ = return ()- {-# INLINE basicSet #-}- basicUnsafeCopy _ _ = return ()- {-# INLINE basicUnsafeCopy #-}- basicUnsafeMove _ _ = return ()- {-# INLINE basicUnsafeMove #-}- basicUnsafeGrow (MV i _) n = return (MV (i + n) RNil)- {-# INLINE basicUnsafeGrow #-}-#if MIN_VERSION_vector(0,11,0)- basicInitialize _ = return ()- {-# INLINE basicInitialize #-}-#endif- --instance ( GM.MVector MVector (Rec Identity rs)- , HasDefaultVector r- )- => GM.MVector MVector (Rec Identity (r ': rs)) where- basicLength (MV i _) = i- {-# INLINE basicLength #-}-- basicUnsafeSlice s e (MV i (MVectorVal v :& rs)) = case GM.basicUnsafeSlice s e (MV i rs) of- MV _ rsNext -> MV e (MVectorVal (GM.basicUnsafeSlice s e v) :& rsNext)- {-# INLINE basicUnsafeSlice #-}-- basicOverlaps (MV i (MVectorVal a :& as)) (MV j (MVectorVal b :& bs)) = - GM.basicOverlaps a b || GM.basicOverlaps (MV i as) (MV j bs)- {-# INLINE basicOverlaps #-}-- basicUnsafeNew :: forall m. PrimMonad m => Int -> m (MVector (PrimState m) (Rec Identity (r ': rs)))- basicUnsafeNew n = - consVec (Proxy :: Proxy m) n <$> GM.basicUnsafeNew n <*> GM.basicUnsafeNew n- {-# INLINE basicUnsafeNew #-}- - basicUnsafeReplicate :: forall m. PrimMonad m => Int -> Rec Identity (r ': rs) -> m (MVector (PrimState m) (Rec Identity (r ': rs)))- basicUnsafeReplicate n (Identity v :& rs) = - consVec (Proxy :: Proxy m) n <$> GM.basicUnsafeReplicate n v <*> GM.basicUnsafeReplicate n rs- {-# INLINE basicUnsafeReplicate #-}-- basicUnsafeRead (MV i (MVectorVal v :& rs)) n = do- r <- GM.basicUnsafeRead v n- rs <- GM.basicUnsafeRead (MV i rs) n- return (Identity r :& rs)- {-# INLINE basicUnsafeRead #-}-- basicUnsafeWrite (MV i (MVectorVal v :& vrs)) n (Identity r :& rs) = do- GM.basicUnsafeWrite v n r- GM.basicUnsafeWrite (MV i vrs) n rs- {-# INLINE basicUnsafeWrite #-}-- basicClear (MV i (MVectorVal v :& vrs)) = do- GM.basicClear v- GM.basicClear (MV i vrs)- {-# INLINE basicClear #-}-- basicSet (MV i (MVectorVal v :& vrs)) (Identity r :& rs) = do- GM.basicSet v r- GM.basicSet (MV i vrs) rs- {-# INLINE basicSet #-}-- basicUnsafeCopy (MV i (MVectorVal a :& as)) (MV j (MVectorVal b :& bs)) = do- GM.basicUnsafeCopy a b- GM.basicUnsafeCopy (MV i as) (MV j bs)- {-# INLINE basicUnsafeCopy #-}-- basicUnsafeMove (MV i (MVectorVal a :& as)) (MV j (MVectorVal b :& bs)) = do- GM.basicUnsafeMove a b- GM.basicUnsafeMove (MV i as) (MV j bs)- {-# INLINE basicUnsafeMove #-}-- basicUnsafeGrow :: forall m. PrimMonad m => MVector (PrimState m) (Rec Identity (r ': rs)) -> Int -> m (MVector (PrimState m) (Rec Identity (r ': rs)))- basicUnsafeGrow (MV i (MVectorVal v :& vrs)) n = do- r <- GM.basicUnsafeGrow v n- rs <- GM.basicUnsafeGrow (MV i vrs) n- return (MV (i + n) (MVectorVal r :& stripMV (Proxy :: Proxy m) rs))- {-# INLINE basicUnsafeGrow #-}--#if MIN_VERSION_vector(0,11,0)- basicInitialize (MV i (MVectorVal v :& rs)) = do- GM.basicInitialize v- GM.basicInitialize (MV i rs)- {-# INLINE basicInitialize #-}-#endif--newtype VectorVal t = VectorVal { getVectorVal :: DefaultVector t t }--data Vector :: * -> * where- V :: !Int -> !(Rec VectorVal rs) -> Vector (Rec Identity rs)- deriving Typeable--type instance G.Mutable Vector = MVector --instance G.Vector Vector (Rec Identity '[]) where- basicUnsafeFreeze (MV n _) = return (V n RNil)- {-# INLINE basicUnsafeFreeze #-}- basicUnsafeThaw (V i _) = return (MV i RNil)- {-# INLINE basicUnsafeThaw #-}- basicLength (V i _) = i- {-# INLINE basicLength #-}- basicUnsafeSlice _ e _ = V e RNil- {-# INLINE basicUnsafeSlice #-}- basicUnsafeIndexM _ n = return RNil- {-# INLINE basicUnsafeIndexM #-}- basicUnsafeCopy _ _ = return ()- {-# INLINE basicUnsafeCopy #-}- elemseq _ RNil b = b- {-# INLINE elemseq #-}--instance ( G.Vector Vector (Rec Identity rs)- , HasDefaultVector r- )- => G.Vector Vector (Rec Identity (r ': rs)) where- basicUnsafeFreeze (MV i (MVectorVal v :& vrs)) = do- r <- G.basicUnsafeFreeze v- rs <- G.basicUnsafeFreeze (MV i vrs)- return (V i (VectorVal r :& stripV rs))- {-# INLINE basicUnsafeFreeze #-}-- basicUnsafeThaw :: forall m. PrimMonad m => Vector (Rec Identity (r ': rs)) -> m (G.Mutable Vector (PrimState m) (Rec Identity (r ': rs)))- basicUnsafeThaw (V i (VectorVal v :& vrs)) = do- r <- G.basicUnsafeThaw v- rs <- G.basicUnsafeThaw (V i vrs)- return (MV i (MVectorVal r :& stripMV (Proxy :: Proxy m) rs))- {-# INLINE basicUnsafeThaw #-}-- basicLength (V i _) = i- {-# INLINE basicLength #-}-- basicUnsafeSlice s e (V i (VectorVal v :& rs)) = case G.basicUnsafeSlice s e (V i rs) of- V _ rsNext -> V e (VectorVal (G.basicUnsafeSlice s e v) :& rsNext)- {-# INLINE basicUnsafeSlice #-}-- basicUnsafeIndexM (V i (VectorVal v :& vrs)) n = do- r <- G.basicUnsafeIndexM v n- rs <- G.basicUnsafeIndexM (V i vrs) n- return (Identity r :& rs)- {-# INLINE basicUnsafeIndexM #-}-- basicUnsafeCopy (MV i (MVectorVal m :& mrs)) (V j (VectorVal v :& vrs)) = do- G.basicUnsafeCopy m v- G.basicUnsafeCopy (MV i mrs) (V j vrs)- {-# INLINE basicUnsafeCopy #-}-- elemseq (V i (VectorVal v :& vrs)) (Identity a :& rs) b = G.elemseq v a (G.elemseq (V i vrs) rs b)- {-# INLINE elemseq #-}- --------------------------------------------- Helper functions for instance methods-------------------------------------------consVec :: Proxy m- -> Int - -> G.Mutable (DefaultVector r) (PrimState m) r - -> MVector (PrimState m) (Rec Identity rs)- -> MVector (PrimState m) (Rec Identity (r ': rs))-consVec _ n v (MV _ rs) = MV n (MVectorVal v :& rs)-{-# INLINE consVec #-}--stripMV :: Proxy m -> MVector (PrimState m) (Rec Identity rs) -> Rec (MVectorVal (PrimState m)) rs-stripMV _ (MV _ rs) = rs-{-# INLINE stripMV #-}--stripV :: Vector (Rec Identity rs) -> Rec VectorVal rs-stripV (V _ rs) = rs-{-# INLINE stripV #-}
− src/Data/Vector/Vinyl/Default/Mutable.hs
@@ -1,283 +0,0 @@-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE GADTs #-}---- |--- Module : Data.Vector.Vinyl.Default.Mutable--- Copyright : Andrew Martin--- License : BSD-style------ Maintainer : Andrew Martin <andrew.thaddeus@gmail.com>--- Stability : experimental--- Portability : non-portable------ Vectors for vinyl records-----module Data.Vector.Vinyl.Default.Mutable (- -- * Mutable vectors of primitive types- MVector(..), -- -- * Accessors-- -- ** Length information- length, null,-- -- ** Extracting subvectors- slice, init, tail, take, drop, splitAt,- unsafeSlice, unsafeInit, unsafeTail, unsafeTake, unsafeDrop,-- -- ** Overlapping- overlaps,-- -- * Construction-- -- ** Initialisation- new, unsafeNew, replicate, replicateM, clone,-- -- ** Growing- grow, unsafeGrow,-- -- ** Restricting memory usage- clear,-- -- * Zipping and unzipping - Omitting for now-- -- * Accessing individual elements- read, write, swap,- unsafeRead, unsafeWrite, unsafeSwap,-- -- * Modifying vectors-- -- ** Filling and copying- set, copy, move, unsafeCopy, unsafeMove-) where--import Data.Vector.Vinyl.Default.Internal-import qualified Data.Vector.Generic.Mutable as G-import Data.Vector.Fusion.Util ( delayed_min )-import Control.Monad.Primitive-import Data.Vinyl.Core (Rec)-import Data.Vinyl.Functor (Identity)--import Prelude hiding ( length, null, replicate, reverse, map, read,- take, drop, splitAt, init, tail,- zip, zip3, unzip, unzip3 )---- Length information--- ---------------------- | Length of the mutable vector.-length :: MVector s (Rec Identity rs) -> Int-{-# INLINE length #-}-length (MV i _) = i---- | Check whether the vector is empty-null :: MVector s (Rec Identity rs) -> Bool-{-# INLINE null #-}-null (MV i _) = i == 0---- Extracting subvectors--- ------------------------- | Yield a part of the mutable vector without copying it.-slice :: G.MVector MVector (Rec Identity rs) => Int -> Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE slice #-}-slice = G.slice--take :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE take #-}-take = G.take--drop :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE drop #-}-drop = G.drop--splitAt :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> (MVector s (Rec Identity rs), MVector s (Rec Identity rs))-{-# INLINE splitAt #-}-splitAt = G.splitAt--init :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE init #-}-init = G.init--tail :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE tail #-}-tail = G.tail---- | Yield a part of the mutable vector without copying it. No bounds checks--- are performed.-unsafeSlice :: G.MVector MVector (Rec Identity rs)- => Int -- ^ starting index- -> Int -- ^ length of the slice- -> MVector s (Rec Identity rs)- -> MVector s (Rec Identity rs)-{-# INLINE unsafeSlice #-}-unsafeSlice = G.unsafeSlice--unsafeTake :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE unsafeTake #-}-unsafeTake = G.unsafeTake--unsafeDrop :: G.MVector MVector (Rec Identity rs) => Int -> MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE unsafeDrop #-}-unsafeDrop = G.unsafeDrop--unsafeInit :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE unsafeInit #-}-unsafeInit = G.unsafeInit--unsafeTail :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs)-{-# INLINE unsafeTail #-}-unsafeTail = G.unsafeTail---- Overlapping--- --------------- | Check whether two vectors overlap.-overlaps :: G.MVector MVector (Rec Identity rs) => MVector s (Rec Identity rs) -> MVector s (Rec Identity rs) -> Bool-{-# INLINE overlaps #-}-overlaps = G.overlaps---- Initialisation--- ------------------ | Create a mutable vector of the given length.-new :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => Int -> m (MVector (PrimState m) (Rec Identity rs))-{-# INLINE new #-}-new = G.new---- | Create a mutable vector of the given length. The length is not checked.-unsafeNew :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => Int -> m (MVector (PrimState m) (Rec Identity rs))-{-# INLINE unsafeNew #-}-unsafeNew = G.unsafeNew---- | Create a mutable vector of the given length (0 if the length is negative)--- and fill it with an initial value.-replicate :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => Int -> (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))-{-# INLINE replicate #-}-replicate = G.replicate---- | Create a mutable vector of the given length (0 if the length is negative)--- and fill it with values produced by repeatedly executing the monadic action.-replicateM :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => Int -> m (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))-{-# INLINE replicateM #-}-replicateM = G.replicateM---- | Create a copy of a mutable vector.-clone :: (PrimMonad m, G.MVector MVector (Rec Identity rs))- => MVector (PrimState m) (Rec Identity rs) -> m (MVector (PrimState m) (Rec Identity rs))-{-# INLINE clone #-}-clone = G.clone---- Growing--- ----------- | Grow a vector by the given number of elements. The number must be--- positive.-grow :: (PrimMonad m, G.MVector MVector (Rec Identity rs))- => MVector (PrimState m) (Rec Identity rs) -> Int -> m (MVector (PrimState m) (Rec Identity rs))-{-# INLINE grow #-}-grow = G.grow---- | Grow a vector by the given number of elements. The number must be--- positive but this is not checked.-unsafeGrow :: (PrimMonad m, G.MVector MVector (Rec Identity rs))- => MVector (PrimState m) (Rec Identity rs) -> Int -> m (MVector (PrimState m) (Rec Identity rs))-{-# INLINE unsafeGrow #-}-unsafeGrow = G.unsafeGrow---- Restricting memory usage--- ---------------------------- | Reset all elements of the vector to some undefined value, clearing all--- references to external objects. This is usually a noop for unboxed vectors.-clear :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> m ()-{-# INLINE clear #-}-clear = G.clear---- Accessing individual elements--- --------------------------------- | Yield the element at the given position.-read :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (Rec Identity rs)-{-# INLINE read #-}-read = G.read---- | Replace the element at the given position.-write :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> (Rec Identity rs) -> m ()-{-# INLINE write #-}-write = G.write---- | Swap the elements at the given positions.-swap :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> Int -> m ()-{-# INLINE swap #-}-swap = G.swap----- | Yield the element at the given position. No bounds checks are performed.-unsafeRead :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> m (Rec Identity rs)-{-# INLINE unsafeRead #-}-unsafeRead = G.unsafeRead---- | Replace the element at the given position. No bounds checks are performed.-unsafeWrite- :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> (Rec Identity rs) -> m ()-{-# INLINE unsafeWrite #-}-unsafeWrite = G.unsafeWrite---- | Swap the elements at the given positions. No bounds checks are performed.-unsafeSwap- :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> Int -> Int -> m ()-{-# INLINE unsafeSwap #-}-unsafeSwap = G.unsafeSwap---- Filling and copying--- ----------------------- | Set all elements of the vector to the given value.-set :: (PrimMonad m, G.MVector MVector (Rec Identity rs)) => MVector (PrimState m) (Rec Identity rs) -> (Rec Identity rs) -> m ()-{-# INLINE set #-}-set = G.set---- | Copy a vector. The two vectors must have the same length and may not--- overlap.-copy :: (PrimMonad m, G.MVector MVector (Rec Identity rs))- => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()-{-# INLINE copy #-}-copy = G.copy---- | Copy a vector. The two vectors must have the same length and may not--- overlap. This is not checked.-unsafeCopy :: (PrimMonad m, G.MVector MVector (Rec Identity rs))- => MVector (PrimState m) (Rec Identity rs) -- ^ target- -> MVector (PrimState m) (Rec Identity rs) -- ^ source- -> m ()-{-# INLINE unsafeCopy #-}-unsafeCopy = G.unsafeCopy---- | Move the contents of a vector. The two vectors must have the same--- length.------ If the vectors do not overlap, then this is equivalent to 'copy'.--- Otherwise, the copying is performed as if the source vector were--- copied to a temporary vector and then the temporary vector was copied--- to the target vector.-move :: (PrimMonad m, G.MVector MVector (Rec Identity rs))- => MVector (PrimState m) (Rec Identity rs) -> MVector (PrimState m) (Rec Identity rs) -> m ()-{-# INLINE move #-}-move = G.move---- | Move the contents of a vector. The two vectors must have the same--- length, but this is not checked.------ If the vectors do not overlap, then this is equivalent to 'unsafeCopy'.--- Otherwise, the copying is performed as if the source vector were--- copied to a temporary vector and then the temporary vector was copied--- to the target vector.-unsafeMove :: (PrimMonad m, G.MVector MVector (Rec Identity rs))- => MVector (PrimState m) (Rec Identity rs) -- ^ target- -> MVector (PrimState m) (Rec Identity rs) -- ^ source- -> m ()-{-# INLINE unsafeMove #-}-unsafeMove = G.unsafeMove-
+ src/Data/Vector/Vinyl/Default/NonEmpty/Monomorphic/Implication.hs view
@@ -0,0 +1,49 @@+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE DataKinds #-}++-----------------------------------------------------------------------------+-- |+-- Copyright : Andrew Martin+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Andrew Martin <andrew.thaddeus@gmail.com>+-- Stability : experimental+-- Portability : non-portable+--+-- This module uses the "constraints" package to prove that if all of the+-- columns satisfy the 'HasDefaultVector' constraint, then a vector +-- parameterized over the record has an instance of the generic vector +-- typeclass.+-----------------------------------------------------------------------------+module Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Implication where++import Data.Constraint+import Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal+import Data.Vinyl.Core (Rec(..))+import Data.Vinyl.Functor (Identity(..))+import Data.Vector.Vinyl.TypeLevel (ListAll)++import qualified Data.Vector.Generic.Mutable as GM+import qualified Data.Vector.Generic as G++listAllVector :: (rs ~ (a ': as))+ => Rec proxy rs + -> ListAll rs HasDefaultVector :- G.Vector Vector (Rec Identity rs)+listAllVector (_ :& RNil) = Sub Dict+listAllVector (_ :& rs@(_ :& _)) = Sub $ case listAllVector rs of+ Sub Dict -> Dict++listAllMVector :: (rs ~ (a ': as))+ => Rec proxy rs + -> ListAll rs HasDefaultVector :- GM.MVector MVector (Rec Identity rs)+listAllMVector (_ :& RNil) = Sub Dict+listAllMVector (_ :& rs@(_ :& _)) = Sub $ case listAllMVector rs of+ Sub Dict -> Dict++-- listAllVectorBoth :: Rec proxy rs +-- -> ListAll rs HasDefaultVector :- (GM.MVector MVector (Rec Identity rs), G.Vector Vector (Rec Identity rs))+-- listAllVectorBoth RNil = Sub Dict+-- listAllVectorBoth (_ :& rs) = Sub $ case listAllVectorBoth rs of+-- Sub Dict -> Dict+
+ src/Data/Vector/Vinyl/Default/NonEmpty/Monomorphic/Internal.hs view
@@ -0,0 +1,249 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE InstanceSigs #-}++#ifndef MIN_VERSION_vector+#define MIN_VERSION_vector(x,y,z) 1+#endif++module Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal+ ( MVector(..)+ , Vector(..)+ , HasDefaultVector(..)+ ) where++import Control.Monad+import Data.Monoid+import Data.Typeable (Typeable)+import GHC.Exts (Constraint)+import Control.Monad.Primitive (PrimMonad,PrimState)+import qualified Data.Vector.Generic.Mutable as GM+import qualified Data.Vector.Generic as G++#if MIN_VERSION_vector(0,11,0)+import Data.Vector.Fusion.Bundle as Stream+#else+import Data.Vector.Fusion.Stream as Stream+#endif++import Prelude hiding ( length, null, replicate, reverse, map, read, take, drop, init, tail )+import Text.Read+import Data.Proxy++import Data.Vinyl.Core(Rec(..))+import Data.Vinyl.Functor (Identity(..))+import Data.Vector.Vinyl.Default.Types (VectorVal(..),MVectorVal(..),HasDefaultVector(..))++data MVector :: * -> * -> * where+ MV :: !(Rec (MVectorVal s) rs) -> MVector s (Rec Identity rs)+ deriving Typeable++instance ( HasDefaultVector r+ )+ => GM.MVector MVector (Rec Identity (r ': '[])) where+ basicLength (MV (MVectorVal v :& RNil)) = GM.basicLength v+ {-# INLINE basicLength #-}+ basicUnsafeSlice s e (MV (MVectorVal v :& RNil)) = MV (MVectorVal (GM.basicUnsafeSlice s e v) :& RNil)+ {-# INLINE basicUnsafeSlice #-}+ basicOverlaps (MV (MVectorVal a :& RNil)) (MV (MVectorVal b :& RNil)) = GM.basicOverlaps a b + {-# INLINE basicOverlaps #-}+ basicUnsafeNew n = do+ r <- GM.basicUnsafeNew n + return (MV (MVectorVal r :& RNil))+ {-# INLINE basicUnsafeNew #-}+ basicUnsafeReplicate n (Identity v :& RNil) = do+ r <- GM.basicUnsafeReplicate n v + return (MV (MVectorVal r :& RNil))+ {-# INLINE basicUnsafeReplicate #-}+ basicUnsafeRead (MV (MVectorVal v :& RNil)) n = do+ r <- GM.basicUnsafeRead v n+ return (Identity r :& RNil)+ {-# INLINE basicUnsafeRead #-}+ basicUnsafeWrite (MV (MVectorVal v :& RNil)) n (Identity r :& RNil) = GM.basicUnsafeWrite v n r+ {-# INLINE basicUnsafeWrite #-}+ basicClear (MV (MVectorVal v :& RNil)) = GM.basicClear v+ {-# INLINE basicClear #-}+ basicSet (MV (MVectorVal v :& RNil)) (Identity r :& RNil) = GM.basicSet v r+ {-# INLINE basicSet #-}+ basicUnsafeCopy (MV (MVectorVal a :& RNil)) (MV (MVectorVal b :& RNil)) = GM.basicUnsafeCopy a b+ {-# INLINE basicUnsafeCopy #-}+ basicUnsafeMove (MV (MVectorVal a :& RNil)) (MV (MVectorVal b :& RNil)) = GM.basicUnsafeMove a b+ {-# INLINE basicUnsafeMove #-}+ basicUnsafeGrow (MV (MVectorVal v :& RNil)) n = do+ r <- GM.basicUnsafeGrow v n+ return (MV (MVectorVal r :& RNil))+ {-# INLINE basicUnsafeGrow #-}+#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV (MVectorVal v :& RNil)) = do+ GM.basicInitialize v+ {-# INLINE basicInitialize #-}+#endif++instance ( GM.MVector MVector (Rec Identity (s ': rs))+ , HasDefaultVector r+ )+ => GM.MVector MVector (Rec Identity (r ': s ': rs)) where+ basicLength (MV (MVectorVal v :& _)) = GM.basicLength v+ {-# INLINE basicLength #-}++ basicUnsafeSlice s e (MV (MVectorVal v :& rs)) = case GM.basicUnsafeSlice s e (MV rs) of+ MV rsNext -> MV (MVectorVal (GM.basicUnsafeSlice s e v) :& rsNext)+ {-# INLINE basicUnsafeSlice #-}++ basicOverlaps (MV (MVectorVal a :& as)) (MV (MVectorVal b :& bs)) = + GM.basicOverlaps a b || GM.basicOverlaps (MV as) (MV bs)+ {-# INLINE basicOverlaps #-}++ basicUnsafeNew :: forall m. PrimMonad m => Int -> m (MVector (PrimState m) (Rec Identity (r ': s ': rs)))+ basicUnsafeNew n = + consVec (Proxy :: Proxy m) <$> GM.basicUnsafeNew n <*> GM.basicUnsafeNew n+ {-# INLINE basicUnsafeNew #-}+ + basicUnsafeReplicate :: forall m. PrimMonad m => Int -> Rec Identity (r ': s ': rs) -> m (MVector (PrimState m) (Rec Identity (r ': s ': rs)))+ basicUnsafeReplicate n (Identity v :& rs) = + consVec (Proxy :: Proxy m) <$> GM.basicUnsafeReplicate n v <*> GM.basicUnsafeReplicate n rs+ {-# INLINE basicUnsafeReplicate #-}++ basicUnsafeRead (MV (MVectorVal v :& rs)) n = do+ r <- GM.basicUnsafeRead v n+ rs <- GM.basicUnsafeRead (MV rs) n+ return (Identity r :& rs)+ {-# INLINE basicUnsafeRead #-}++ basicUnsafeWrite (MV (MVectorVal v :& vrs)) n (Identity r :& rs) = do+ GM.basicUnsafeWrite v n r+ GM.basicUnsafeWrite (MV vrs) n rs+ {-# INLINE basicUnsafeWrite #-}++ basicClear (MV (MVectorVal v :& vrs)) = do+ GM.basicClear v+ GM.basicClear (MV vrs)+ {-# INLINE basicClear #-}++ basicSet (MV (MVectorVal v :& vrs)) (Identity r :& rs) = do+ GM.basicSet v r+ GM.basicSet (MV vrs) rs+ {-# INLINE basicSet #-}++ basicUnsafeCopy (MV (MVectorVal a :& as)) (MV (MVectorVal b :& bs)) = do+ GM.basicUnsafeCopy a b+ GM.basicUnsafeCopy (MV as) (MV bs)+ {-# INLINE basicUnsafeCopy #-}++ basicUnsafeMove (MV (MVectorVal a :& as)) (MV (MVectorVal b :& bs)) = do+ GM.basicUnsafeMove a b+ GM.basicUnsafeMove (MV as) (MV bs)+ {-# INLINE basicUnsafeMove #-}++ basicUnsafeGrow :: forall m. PrimMonad m => MVector (PrimState m) (Rec Identity (r ': s ': rs)) -> Int -> m (MVector (PrimState m) (Rec Identity (r ': s ': rs)))+ basicUnsafeGrow (MV (MVectorVal v :& vrs)) n = do+ r <- GM.basicUnsafeGrow v n+ rs <- GM.basicUnsafeGrow (MV vrs) n+ return (MV (MVectorVal r :& stripMV (Proxy :: Proxy m) rs))+ {-# INLINE basicUnsafeGrow #-}++#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV (MVectorVal v :& rs)) = do+ GM.basicInitialize v+ GM.basicInitialize (MV rs)+ {-# INLINE basicInitialize #-}+#endif++data Vector :: * -> * where+ V :: !(Rec VectorVal rs) -> Vector (Rec Identity rs)+ deriving Typeable++type instance G.Mutable Vector = MVector ++instance ( HasDefaultVector r+ )+ => G.Vector Vector (Rec Identity (r ': '[])) where+ basicUnsafeFreeze (MV (MVectorVal v :& RNil)) = do+ r <- G.basicUnsafeFreeze v+ return (V (VectorVal r :& RNil))+ {-# INLINE basicUnsafeFreeze #-}+ basicUnsafeThaw (V (VectorVal v :& RNil)) = do+ r <- G.basicUnsafeThaw v+ return (MV (MVectorVal r :& RNil))+ {-# INLINE basicUnsafeThaw #-}+ basicLength (V (VectorVal v :& RNil)) = G.basicLength v+ {-# INLINE basicLength #-}+ basicUnsafeSlice s e (V (VectorVal v :& RNil)) = V (VectorVal (G.basicUnsafeSlice s e v) :& RNil)+ {-# INLINE basicUnsafeSlice #-}+ basicUnsafeIndexM (V (VectorVal v :& RNil)) n = do+ r <- G.basicUnsafeIndexM v n+ return (Identity r :& RNil)+ {-# INLINE basicUnsafeIndexM #-}+ basicUnsafeCopy (MV (MVectorVal m :& RNil)) (V (VectorVal v :& RNil)) = G.basicUnsafeCopy m v+ {-# INLINE basicUnsafeCopy #-}+ elemseq (V (VectorVal v :& RNil)) (Identity a :& RNil) b = G.elemseq v a b+ {-# INLINE elemseq #-}+++instance ( G.Vector Vector (Rec Identity (s ': rs))+ , HasDefaultVector r+ )+ => G.Vector Vector (Rec Identity (r ': s ': rs)) where+ basicUnsafeFreeze (MV (MVectorVal v :& vrs)) = do+ r <- G.basicUnsafeFreeze v+ rs <- G.basicUnsafeFreeze (MV vrs)+ return (V (VectorVal r :& stripV rs))+ {-# INLINE basicUnsafeFreeze #-}++ basicUnsafeThaw :: forall m. PrimMonad m => Vector (Rec Identity (r ': s ': rs)) -> m (G.Mutable Vector (PrimState m) (Rec Identity (r ': s ': rs)))+ basicUnsafeThaw (V (VectorVal v :& vrs)) = do+ r <- G.basicUnsafeThaw v+ rs <- G.basicUnsafeThaw (V vrs)+ return (MV (MVectorVal r :& stripMV (Proxy :: Proxy m) rs))+ {-# INLINE basicUnsafeThaw #-}++ basicLength (V (VectorVal v :& _)) = G.basicLength v+ {-# INLINE basicLength #-}++ basicUnsafeSlice s e (V (VectorVal v :& rs)) = case G.basicUnsafeSlice s e (V rs) of+ V rsNext -> V (VectorVal (G.basicUnsafeSlice s e v) :& rsNext)+ {-# INLINE basicUnsafeSlice #-}++ basicUnsafeIndexM (V (VectorVal v :& vrs)) n = do+ r <- G.basicUnsafeIndexM v n+ rs <- G.basicUnsafeIndexM (V vrs) n+ return (Identity r :& rs)+ {-# INLINE basicUnsafeIndexM #-}++ basicUnsafeCopy (MV (MVectorVal m :& mrs)) (V (VectorVal v :& vrs)) = do+ G.basicUnsafeCopy m v+ G.basicUnsafeCopy (MV mrs) (V vrs)+ {-# INLINE basicUnsafeCopy #-}++ elemseq (V (VectorVal v :& vrs)) (Identity a :& rs) b = G.elemseq v a (G.elemseq (V vrs) rs b)+ {-# INLINE elemseq #-}+ +-----------------------------------------+-- Helper functions for instance methods+-----------------------------------------+consVec :: Proxy m+ -> G.Mutable (DefaultVector r) (PrimState m) r + -> MVector (PrimState m) (Rec Identity rs)+ -> MVector (PrimState m) (Rec Identity (r ': rs))+consVec _ v (MV rs) = MV (MVectorVal v :& rs)+{-# INLINE consVec #-}++stripMV :: Proxy m -> MVector (PrimState m) (Rec Identity rs) -> Rec (MVectorVal (PrimState m)) rs+stripMV _ (MV rs) = rs+{-# INLINE stripMV #-}++stripV :: Vector (Rec Identity rs) -> Rec VectorVal rs+stripV (V rs) = rs+{-# INLINE stripV #-}
+ src/Data/Vector/Vinyl/Default/NonEmpty/Polymorphic/Implication.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE DataKinds #-}++-----------------------------------------------------------------------------+-- |+-- Copyright : Andrew Martin+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Andrew Martin <andrew.thaddeus@gmail.com>+-- Stability : experimental+-- Portability : non-portable+--+-- This module uses the "constraints" package to prove that if all of the+-- columns satisfy the 'HasDefaultVector' constraint, then a vector +-- parameterized over the record has an instance of the generic vector +-- typeclass.+-----------------------------------------------------------------------------+module Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Implication where++import Data.Constraint+import Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal+import Data.Vinyl.Core (Rec(..))+import Data.Vinyl.Functor (Identity(..))+import Data.Vinyl.TypeLevel (RecAll)++import qualified Data.Vector.Generic.Mutable as GM+import qualified Data.Vector.Generic as G++listAllVector :: (rs ~ (a ': as))+ => Rec f rs + -> RecAll f rs HasDefaultVector :- G.Vector Vector (Rec f rs)+listAllVector (_ :& RNil) = Sub Dict+listAllVector (_ :& rs@(_ :& _)) = Sub $ case listAllVector rs of+ Sub Dict -> Dict++listAllMVector :: (rs ~ (a ': as))+ => Rec f rs + -> RecAll f rs HasDefaultVector :- GM.MVector MVector (Rec f rs)+listAllMVector (_ :& RNil) = Sub Dict+listAllMVector (_ :& rs@(_ :& _)) = Sub $ case listAllMVector rs of+ Sub Dict -> Dict++listAllMVector' :: (rs ~ (a ': as))+ => proxy1 f+ -> Rec proxy2 rs + -> RecAll f rs HasDefaultVector :- GM.MVector MVector (Rec f rs)+listAllMVector' _ (_ :& RNil) = Sub Dict+listAllMVector' p (_ :& rs@(_ :& _)) = Sub $ case listAllMVector' p rs of+ Sub Dict -> Dict++
+ src/Data/Vector/Vinyl/Default/NonEmpty/Polymorphic/Internal.hs view
@@ -0,0 +1,262 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE InstanceSigs #-}++#ifndef MIN_VERSION_vector+#define MIN_VERSION_vector(x,y,z) 1+#endif++module Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal+ ( MVector(..)+ , Vector(..)+ , HasDefaultVector(..)+ ) where++import Control.Monad+import Data.Monoid+import Data.Typeable (Typeable)+import GHC.Exts (Constraint)+import Control.Monad.Primitive (PrimMonad,PrimState)+import qualified Data.Vector.Generic.Mutable as GM+import qualified Data.Vector.Generic as G++#if MIN_VERSION_vector(0,11,0)+import Data.Vector.Fusion.Bundle as Stream+#else+import Data.Vector.Fusion.Stream as Stream+#endif++import Prelude hiding ( length, null, replicate, reverse, map, read, take, drop, init, tail )+import Text.Read+import Data.Proxy++import Data.Vinyl.Core(Rec(..))+import Data.Vinyl.Functor (Identity(..),Compose(..))+import Data.Vector.Vinyl.Default.Types (VectorVal(..),MVectorVal(..),HasDefaultVector(..))++data MVector :: * -> * -> * where+ MV :: !(Rec (Compose (MVectorVal s) f) rs) -> MVector s (Rec f rs)+ deriving Typeable++instance ( HasDefaultVector (f r)+ )+ => GM.MVector MVector (Rec f (r ': '[])) where+ basicLength (MV (Compose (MVectorVal v) :& RNil)) = GM.basicLength v+ {-# INLINE basicLength #-}+ basicUnsafeSlice s e (MV (Compose (MVectorVal v) :& RNil)) = + MV (Compose (MVectorVal (GM.basicUnsafeSlice s e v)) :& RNil)+ {-# INLINE basicUnsafeSlice #-}+ basicOverlaps (MV (Compose (MVectorVal a) :& RNil)) (MV (Compose (MVectorVal b) :& RNil)) = + GM.basicOverlaps a b + {-# INLINE basicOverlaps #-}+ basicUnsafeNew n = do+ r <- GM.basicUnsafeNew n + return (MV (Compose (MVectorVal r) :& RNil))+ {-# INLINE basicUnsafeNew #-}+ basicUnsafeReplicate n (v :& RNil) = do+ r <- GM.basicUnsafeReplicate n v + return (MV (Compose (MVectorVal r) :& RNil))+ {-# INLINE basicUnsafeReplicate #-}+ basicUnsafeRead (MV (Compose (MVectorVal v) :& RNil)) n = do+ r <- GM.basicUnsafeRead v n+ return (r :& RNil)+ {-# INLINE basicUnsafeRead #-}+ basicUnsafeWrite (MV (Compose (MVectorVal v) :& RNil)) n (r :& RNil) = GM.basicUnsafeWrite v n r+ {-# INLINE basicUnsafeWrite #-}+ basicClear (MV (Compose (MVectorVal v) :& RNil)) = GM.basicClear v+ {-# INLINE basicClear #-}+ basicSet (MV (Compose (MVectorVal v) :& RNil)) (r :& RNil) = GM.basicSet v r+ {-# INLINE basicSet #-}+ basicUnsafeCopy (MV (Compose (MVectorVal a) :& RNil)) (MV (Compose (MVectorVal b) :& RNil)) = + GM.basicUnsafeCopy a b+ {-# INLINE basicUnsafeCopy #-}+ basicUnsafeMove (MV (Compose (MVectorVal a) :& RNil)) (MV (Compose (MVectorVal b) :& RNil)) = + GM.basicUnsafeMove a b+ {-# INLINE basicUnsafeMove #-}+ basicUnsafeGrow (MV (Compose (MVectorVal v) :& RNil)) n = do+ r <- GM.basicUnsafeGrow v n+ return (MV (Compose (MVectorVal r) :& RNil))+ {-# INLINE basicUnsafeGrow #-}+#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV (Compose (MVectorVal v) :& RNil)) = do+ GM.basicInitialize v+ {-# INLINE basicInitialize #-}+#endif++instance ( GM.MVector MVector (Rec f (s ': rs))+ , HasDefaultVector (f r)+ )+ => GM.MVector MVector (Rec f (r ': s ': rs)) where+ basicLength (MV (Compose (MVectorVal v) :& _)) = GM.basicLength v+ {-# INLINE basicLength #-}++ basicUnsafeSlice s e (MV (Compose (MVectorVal v) :& rs)) = case GM.basicUnsafeSlice s e (MV rs) of+ MV rsNext -> MV (Compose (MVectorVal (GM.basicUnsafeSlice s e v)) :& rsNext)+ {-# INLINE basicUnsafeSlice #-}++ basicOverlaps (MV (Compose (MVectorVal a) :& as)) (MV (Compose (MVectorVal b) :& bs)) = + GM.basicOverlaps a b || GM.basicOverlaps (MV as) (MV bs)+ {-# INLINE basicOverlaps #-}++ basicUnsafeNew :: forall m. PrimMonad m + => Int -> m (MVector (PrimState m) (Rec f (r ': s ': rs)))+ basicUnsafeNew n = + consVec (Proxy :: Proxy m) <$> GM.basicUnsafeNew n <*> GM.basicUnsafeNew n+ {-# INLINE basicUnsafeNew #-}+ + basicUnsafeReplicate :: forall m. PrimMonad m + => Int -> Rec f (r ': s ': rs) + -> m (MVector (PrimState m) (Rec f (r ': s ': rs)))+ basicUnsafeReplicate n (v :& rs) = + consVec (Proxy :: Proxy m) <$> GM.basicUnsafeReplicate n v <*> GM.basicUnsafeReplicate n rs+ {-# INLINE basicUnsafeReplicate #-}++ basicUnsafeRead (MV (Compose (MVectorVal v) :& rs)) n = do+ r <- GM.basicUnsafeRead v n+ rs <- GM.basicUnsafeRead (MV rs) n+ return (r :& rs)+ {-# INLINE basicUnsafeRead #-}++ basicUnsafeWrite (MV (Compose (MVectorVal v) :& vrs)) n (r :& rs) = do+ GM.basicUnsafeWrite v n r+ GM.basicUnsafeWrite (MV vrs) n rs+ {-# INLINE basicUnsafeWrite #-}++ basicClear (MV (Compose (MVectorVal v) :& vrs)) = do+ GM.basicClear v+ GM.basicClear (MV vrs)+ {-# INLINE basicClear #-}++ basicSet (MV (Compose (MVectorVal v) :& vrs)) (r :& rs) = do+ GM.basicSet v r+ GM.basicSet (MV vrs) rs+ {-# INLINE basicSet #-}++ basicUnsafeCopy (MV (Compose (MVectorVal a) :& as)) (MV (Compose (MVectorVal b) :& bs)) = do+ GM.basicUnsafeCopy a b+ GM.basicUnsafeCopy (MV as) (MV bs)+ {-# INLINE basicUnsafeCopy #-}++ basicUnsafeMove (MV (Compose (MVectorVal a) :& as)) (MV (Compose (MVectorVal b) :& bs)) = do+ GM.basicUnsafeMove a b+ GM.basicUnsafeMove (MV as) (MV bs)+ {-# INLINE basicUnsafeMove #-}++ basicUnsafeGrow :: forall m. PrimMonad m + => MVector (PrimState m) (Rec f (r ': s ': rs)) + -> Int -> m (MVector (PrimState m) (Rec f (r ': s ': rs)))+ basicUnsafeGrow (MV (Compose (MVectorVal v) :& vrs)) n = do+ r <- GM.basicUnsafeGrow v n+ rs <- GM.basicUnsafeGrow (MV vrs) n+ return (MV (Compose (MVectorVal r) :& stripMV (Proxy :: Proxy m) rs))+ {-# INLINE basicUnsafeGrow #-}++#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV (MVectorVal v :& rs)) = do+ GM.basicInitialize v+ GM.basicInitialize (MV rs)+ {-# INLINE basicInitialize #-}+#endif++data Vector :: * -> * where+ V :: !(Rec (Compose VectorVal f) rs) -> Vector (Rec f rs)+ deriving Typeable++type instance G.Mutable Vector = MVector ++instance ( HasDefaultVector (f r)+ )+ => G.Vector Vector (Rec f (r ': '[])) where+ basicUnsafeFreeze (MV (Compose (MVectorVal v) :& RNil)) = do+ r <- G.basicUnsafeFreeze v+ return (V (Compose (VectorVal r) :& RNil))+ {-# INLINE basicUnsafeFreeze #-}+ basicUnsafeThaw (V (Compose (VectorVal v) :& RNil)) = do+ r <- G.basicUnsafeThaw v+ return (MV (Compose (MVectorVal r) :& RNil))+ {-# INLINE basicUnsafeThaw #-}+ basicLength (V (Compose (VectorVal v) :& RNil)) = G.basicLength v+ {-# INLINE basicLength #-}+ basicUnsafeSlice s e (V (Compose (VectorVal v) :& RNil)) = + V (Compose (VectorVal (G.basicUnsafeSlice s e v)) :& RNil)+ {-# INLINE basicUnsafeSlice #-}+ basicUnsafeIndexM (V (Compose (VectorVal v) :& RNil)) n = do+ r <- G.basicUnsafeIndexM v n+ return (r :& RNil)+ {-# INLINE basicUnsafeIndexM #-}+ basicUnsafeCopy (MV (Compose (MVectorVal m) :& RNil)) (V (Compose (VectorVal v) :& RNil)) = G.basicUnsafeCopy m v+ {-# INLINE basicUnsafeCopy #-}+ elemseq (V (Compose (VectorVal v) :& RNil)) (a :& RNil) b = G.elemseq v a b+ {-# INLINE elemseq #-}+++instance ( G.Vector Vector (Rec f (s ': rs))+ , HasDefaultVector (f r)+ )+ => G.Vector Vector (Rec f (r ': s ': rs)) where+ basicUnsafeFreeze (MV (Compose (MVectorVal v) :& vrs)) = do+ r <- G.basicUnsafeFreeze v+ rs <- G.basicUnsafeFreeze (MV vrs)+ return (V (Compose (VectorVal r) :& stripV rs))+ {-# INLINE basicUnsafeFreeze #-}++ basicUnsafeThaw :: forall m. PrimMonad m + => Vector (Rec f (r ': s ': rs)) + -> m (G.Mutable Vector (PrimState m) (Rec f (r ': s ': rs)))+ basicUnsafeThaw (V (Compose (VectorVal v) :& vrs)) = do+ r <- G.basicUnsafeThaw v+ rs <- G.basicUnsafeThaw (V vrs)+ return (MV (Compose (MVectorVal r) :& stripMV (Proxy :: Proxy m) rs))+ {-# INLINE basicUnsafeThaw #-}++ basicLength (V (Compose (VectorVal v) :& _)) = G.basicLength v+ {-# INLINE basicLength #-}++ basicUnsafeSlice s e (V (Compose (VectorVal v) :& rs)) = case G.basicUnsafeSlice s e (V rs) of+ V rsNext -> V (Compose (VectorVal (G.basicUnsafeSlice s e v)) :& rsNext)+ {-# INLINE basicUnsafeSlice #-}++ basicUnsafeIndexM (V (Compose (VectorVal v) :& vrs)) n = do+ r <- G.basicUnsafeIndexM v n+ rs <- G.basicUnsafeIndexM (V vrs) n+ return (r :& rs)+ {-# INLINE basicUnsafeIndexM #-}++ basicUnsafeCopy (MV (Compose (MVectorVal m) :& mrs)) (V (Compose (VectorVal v) :& vrs)) = do+ G.basicUnsafeCopy m v+ G.basicUnsafeCopy (MV mrs) (V vrs)+ {-# INLINE basicUnsafeCopy #-}++ elemseq (V (Compose (VectorVal v) :& vrs)) (a :& rs) b = G.elemseq v a (G.elemseq (V vrs) rs b)+ {-# INLINE elemseq #-}+ +-----------------------------------------+-- Helper functions for instance methods+-----------------------------------------+consVec :: Proxy m+ -> G.Mutable (DefaultVector (f r)) (PrimState m) (f r)+ -> MVector (PrimState m) (Rec f rs)+ -> MVector (PrimState m) (Rec f (r ': rs))+consVec _ v (MV rs) = MV (Compose (MVectorVal v) :& rs)+{-# INLINE consVec #-}++stripMV :: Proxy m -> MVector (PrimState m) (Rec f rs) -> Rec (Compose (MVectorVal (PrimState m)) f) rs+stripMV _ (MV rs) = rs+{-# INLINE stripMV #-}++stripV :: Vector (Rec f rs) -> Rec (Compose VectorVal f) rs+stripV (V rs) = rs+{-# INLINE stripV #-}+
+ src/Data/Vector/Vinyl/Default/Types.hs view
@@ -0,0 +1,214 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE UndecidableInstances #-}+module Data.Vector.Vinyl.Default.Types+ ( MVectorVal(..)+ , VectorVal(..)+ , HasDefaultVector(..)+ , DefaultBoxed(..)+ ) where++import Data.Default (Default(def))+import qualified Data.Vector as B+import qualified Data.Vector.Unboxed as U+import qualified Data.Text as Text+import qualified Data.Text.Lazy as LText+import qualified Data.ByteString as ByteString+import qualified Data.ByteString.Lazy as LByteString+import qualified Data.Vector.Generic.Mutable as GM+import qualified Data.Vector.Generic as G+import Data.Vector.Vinyl.Default.Types.Deriving (derivingVector)+import Data.Int (Int8,Int16,Int32,Int64)+import Data.Word (Word8,Word16,Word32,Word64)++newtype VectorVal t = VectorVal { getVectorVal :: DefaultVector t t }+newtype MVectorVal s t = MVectorVal { getMVectorVal :: G.Mutable (DefaultVector t) s t }+newtype DefaultBoxed a = DefaultBoxed { getDefaultBoxed :: a }++-- | The most efficient vector type for each column data type.+class ( GM.MVector (G.Mutable (DefaultVector t)) t+ , G.Vector (DefaultVector t) t+ ) => HasDefaultVector t where+ type DefaultVector t :: * -> *++instance HasDefaultVector (DefaultBoxed a) where+ type DefaultVector (DefaultBoxed a) = B.Vector++instance HasDefaultVector Int where+ type DefaultVector Int = U.Vector+instance HasDefaultVector Char where+ type DefaultVector Char = U.Vector+instance HasDefaultVector Bool where+ type DefaultVector Bool = U.Vector+instance HasDefaultVector Float where+ type DefaultVector Float = U.Vector+instance HasDefaultVector Double where+ type DefaultVector Double = U.Vector++instance HasDefaultVector Int8 where+ type DefaultVector Int8 = U.Vector+instance HasDefaultVector Int16 where+ type DefaultVector Int16 = U.Vector+instance HasDefaultVector Int32 where+ type DefaultVector Int32 = U.Vector+instance HasDefaultVector Int64 where+ type DefaultVector Int64 = U.Vector++instance HasDefaultVector Word8 where+ type DefaultVector Word8 = U.Vector+instance HasDefaultVector Word16 where+ type DefaultVector Word16 = U.Vector+instance HasDefaultVector Word32 where+ type DefaultVector Word32 = U.Vector+instance HasDefaultVector Word64 where+ type DefaultVector Word64 = U.Vector++instance HasDefaultVector [a] where+ type DefaultVector [a] = B.Vector++instance HasDefaultVector Text.Text where+ type DefaultVector Text.Text = B.Vector+instance HasDefaultVector LText.Text where+ type DefaultVector LText.Text = B.Vector+instance HasDefaultVector ByteString.ByteString where+ type DefaultVector ByteString.ByteString = B.Vector+instance HasDefaultVector LByteString.ByteString where+ type DefaultVector LByteString.ByteString = B.Vector++instance (HasDefaultVector a, HasDefaultVector b) => HasDefaultVector (a,b) where+ type DefaultVector (a,b) = V_Tuple2++-- instance for tuples+data MV_Tuple2 s c where+ MV_Tuple2 :: MVectorVal s a -> MVectorVal s b -> MV_Tuple2 s (a,b)+data V_Tuple2 c where+ V_Tuple2 :: VectorVal a -> VectorVal b -> V_Tuple2 (a,b)+type instance G.Mutable V_Tuple2 = MV_Tuple2++instance ( HasDefaultVector a+ , HasDefaultVector b+ )+ => GM.MVector MV_Tuple2 (a,b) where+ basicLength (MV_Tuple2 (MVectorVal v) _) = GM.basicLength v+ {-# INLINE basicLength #-}+ basicUnsafeSlice s e (MV_Tuple2 (MVectorVal v) (MVectorVal u)) = MV_Tuple2+ (MVectorVal (GM.basicUnsafeSlice s e v))+ (MVectorVal (GM.basicUnsafeSlice s e u))+ {-# INLINE basicUnsafeSlice #-}+ basicOverlaps (MV_Tuple2 (MVectorVal v1) (MVectorVal u1)) (MV_Tuple2 (MVectorVal v2) (MVectorVal u2)) = + GM.basicOverlaps v1 v2 || GM.basicOverlaps u1 u2+ {-# INLINE basicOverlaps #-}+ basicUnsafeNew n = MV_Tuple2 <$> fmap MVectorVal (GM.basicUnsafeNew n)+ <*> fmap MVectorVal (GM.basicUnsafeNew n)+ {-# INLINE basicUnsafeNew #-}+ basicUnsafeReplicate n (a,b) = + MV_Tuple2 <$> (fmap MVectorVal (GM.basicUnsafeReplicate n a))+ <*> (fmap MVectorVal (GM.basicUnsafeReplicate n b))+ {-# INLINE basicUnsafeReplicate #-}+ basicUnsafeRead (MV_Tuple2 (MVectorVal v) (MVectorVal u)) n = do+ v' <- GM.basicUnsafeRead v n+ u' <- GM.basicUnsafeRead u n+ return (v',u')+ {-# INLINE basicUnsafeRead #-}+ basicUnsafeWrite (MV_Tuple2 (MVectorVal v) (MVectorVal u)) n (v',u') = do+ GM.basicUnsafeWrite v n v'+ GM.basicUnsafeWrite u n u'+ {-# INLINE basicUnsafeWrite #-}+ basicClear (MV_Tuple2 (MVectorVal v) (MVectorVal u)) = do+ GM.basicClear v+ GM.basicClear u+ {-# INLINE basicClear #-}+ basicSet (MV_Tuple2 (MVectorVal v) (MVectorVal u)) (v',u') = do+ GM.basicSet v v'+ GM.basicSet u u'+ {-# INLINE basicSet #-}+ basicUnsafeCopy (MV_Tuple2 (MVectorVal v1) (MVectorVal u1)) (MV_Tuple2 (MVectorVal v2) (MVectorVal u2)) = do+ GM.basicUnsafeCopy v1 v2+ GM.basicUnsafeCopy u1 u2+ {-# INLINE basicUnsafeCopy #-}+ basicUnsafeMove (MV_Tuple2 (MVectorVal v1) (MVectorVal u1)) (MV_Tuple2 (MVectorVal v2) (MVectorVal u2)) = do+ GM.basicUnsafeMove v1 v2+ GM.basicUnsafeMove u1 u2+ {-# INLINE basicUnsafeMove #-}+ basicUnsafeGrow (MV_Tuple2 (MVectorVal v) (MVectorVal u)) n = do+ v' <- GM.basicUnsafeGrow v n+ u' <- GM.basicUnsafeGrow u n+ return (MV_Tuple2 (MVectorVal v') (MVectorVal u'))+ {-# INLINE basicUnsafeGrow #-}++#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV_Tuple2 (MVectorVal v) (MVectorVal u)) = do+ GM.basicInitialize v+ GM.basicInitialize u+ {-# INLINE basicInitialize #-}+#endif+instance ( HasDefaultVector a+ , HasDefaultVector b+ )+ => G.Vector V_Tuple2 (a,b) where+ basicUnsafeFreeze (MV_Tuple2 (MVectorVal v) (MVectorVal u)) = do+ v' <- G.basicUnsafeFreeze v+ u' <- G.basicUnsafeFreeze u+ return (V_Tuple2 (VectorVal v') (VectorVal u'))+ {-# INLINE basicUnsafeFreeze #-}+ basicUnsafeThaw (V_Tuple2 (VectorVal v) (VectorVal u)) = do+ v' <- G.basicUnsafeThaw v+ u' <- G.basicUnsafeThaw u+ return (MV_Tuple2 (MVectorVal v') (MVectorVal u'))+ {-# INLINE basicUnsafeThaw #-}+ basicLength (V_Tuple2 (VectorVal v) _) = G.basicLength v+ {-# INLINE basicLength #-}+ basicUnsafeSlice s e (V_Tuple2 (VectorVal v) (VectorVal u)) = + (V_Tuple2 (VectorVal (G.basicUnsafeSlice s e v)) + (VectorVal (G.basicUnsafeSlice s e u)))+ {-# INLINE basicUnsafeSlice #-}+ basicUnsafeIndexM (V_Tuple2 (VectorVal v) (VectorVal u)) n = do+ v' <- G.basicUnsafeIndexM v n+ u' <- G.basicUnsafeIndexM u n+ return (v',u')+ {-# INLINE basicUnsafeIndexM #-}+ basicUnsafeCopy (MV_Tuple2 (MVectorVal mv) (MVectorVal mu)) (V_Tuple2 (VectorVal v) (VectorVal u)) = do+ G.basicUnsafeCopy mv v+ G.basicUnsafeCopy mu u+ {-# INLINE basicUnsafeCopy #-}+ elemseq (V_Tuple2 (VectorVal v) (VectorVal u)) (v',u') b = G.elemseq v v' (G.elemseq u u' b)+ {-# INLINE elemseq #-}++class HasVectorizableRepresentation a where+ type VectorizableRepresentation a :: *++-- Derived stuff below here. Basically, we want to get+-- maximally efficient vectors for things like `Maybe a`.+instance HasVectorizableRepresentation (a,b,c) where+ type VectorizableRepresentation (a,b,c) = (a,(b,c))+derivingVector "Tuple3" ''HasDefaultVector ''DefaultVector ''VectorizableRepresentation+ [t| forall a b c. (HasDefaultVector a, HasDefaultVector b, HasDefaultVector c) => (a,b,c) -> (a,(b,c)) |]+ [| \ (a,b,c) -> (a,(b,c)) |]+ [| \ (a,(b,c)) -> (a,b,c) |]+instance (HasDefaultVector a, HasDefaultVector b, HasDefaultVector c) => HasDefaultVector (a,b,c) where+ type DefaultVector (a,b,c) = V_Tuple3++instance HasVectorizableRepresentation (Maybe a) where+ type VectorizableRepresentation (Maybe a) = (Bool,a)+derivingVector "Maybe" ''HasDefaultVector ''DefaultVector ''VectorizableRepresentation+ [t| forall a. (Default a, HasDefaultVector a) => Maybe a -> (Bool, a) |]+ [| maybe (False, def) (\ x -> (True, x)) |]+ [| \ (b, x) -> if b then Just x else Nothing |]+instance (Default a, HasDefaultVector a) => HasDefaultVector (Maybe a) where+ type DefaultVector (Maybe a) = V_Maybe++instance HasVectorizableRepresentation (Either a b) where+ type VectorizableRepresentation (Either a b) = (Bool,(a,b))+derivingVector "Either" ''HasDefaultVector ''DefaultVector ''VectorizableRepresentation+ [t| forall a b. (Default a, Default b, HasDefaultVector a, HasDefaultVector b) => Either a b -> (Bool, (a,b)) |]+ [| either (\a -> (True,(a,def))) (\b -> (True, (def,b))) |]+ [| \ (p, (a,b)) -> if p then Left a else Right b |]+instance (Default a, Default b, HasDefaultVector a, HasDefaultVector b) => HasDefaultVector (Either a b) where+ type DefaultVector (Either a b) = V_Either+
+ src/Data/Vector/Vinyl/Default/Types/Deriving.hs view
@@ -0,0 +1,189 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TemplateHaskell #-}+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702+{-# LANGUAGE Trustworthy #-}+#endif+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE ViewPatterns #-}+{-# OPTIONS -Wall #-}++{-|+Module: Data.Vector.Unboxed.Deriving+Copyright: © 2012−2015 Liyang HU+License: BSD3+Maintainer: vector-th-unbox@liyang.hu+Stability: experimental+Portability: non-portable+-}++module Data.Vector.Vinyl.Default.Types.Deriving+ ( -- $usage+ derivingVector+ ) where++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif+import Control.Arrow+import Control.Monad+import Data.Char (isAlphaNum)+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Generic.Mutable as M+-- import Data.Vector.Unboxed.Base (MVector (..), Vector (..), Unbox)+import Language.Haskell.TH++-- Create a @Pat@ bound to the given name and an @Exp@ for said binding.+newPatExp :: String -> Q (Pat, Exp)+newPatExp = fmap (VarP &&& VarE) . newName++data Common = Common+ { mvName, vName :: Name+ , i, n, mv, mv', v :: (Pat, Exp) }++common :: String -> Q Common+common name = do+ -- A bit looser than “Haskell 2010: §2.4 Identifiers and Operators”…+ let valid c = c == '_' || c == '\'' || c == '#' || isAlphaNum c+ unless (all valid name) $ do+ fail (show name ++ " is not a valid constructor suffix!")+ let mvName = mkName ("MV_" ++ name)+ let vName = mkName ("V_" ++ name)+ i <- newPatExp "idx"+ n <- newPatExp "len"+ mv <- first (ConP mvName . (:[])) <$> newPatExp "mvec"+ mv' <- first (ConP mvName . (:[])) <$> newPatExp "mvec'"+ v <- first (ConP vName . (:[])) <$> newPatExp "vec"+ return Common {..}++-- Turn any 'Name' into a capturable one.+capture :: Name -> Name+#if __GLASGOW_HASKELL__ == 704+capture = mkName . nameBase+#else+capture = id+#endif++liftE :: Exp -> Exp -> Exp+liftE e = InfixE (Just e) (VarE 'liftM) . Just++-- Create a wrapper for the given function with the same 'nameBase', given+-- a list of argument bindings and expressions in terms of said bindings.+-- A final coercion (@Exp → Exp@) is applied to the body of the function.+-- Complimentary @INLINE@ pragma included.+wrap :: Name -> [(Pat, Exp)] -> (Exp -> Exp) -> [Dec]+wrap fun (unzip -> (pats, exps)) coerce = [inline, method] where+ name = capture fun+ inline = PragmaD (InlineP name Inline FunLike AllPhases)+ body = coerce $ foldl AppE (VarE fun) exps+ method = FunD name [Clause pats (NormalB body) []]++{-| Let's consider a more complex example: suppose we want an @Unbox@+instance for @Maybe a@. We could encode this using the pair @(Bool, a)@,+with the boolean indicating whether we have @Nothing@ or @Just@ something.+This encoding requires a dummy value in the @Nothing@ case, necessitating an+additional <http://hackage.haskell.org/package/data-default/docs/Data-Default.html#t:Default Default>+constraint. Thus:++>derivingVector "Maybe"+> [t| ∀ a. (Default a, Unbox a) ⇒ Maybe a → (Bool, a) |]+> [| maybe (False, def) (\ x → (True, x)) |]+> [| \ (b, x) → if b then Just x else Nothing |]+-}+derivingVector+ :: String -- ^ Unique constructor suffix for the MVector and Vector data families+ -> Name -- ^ Name of the class+ -> Name -- ^ Name of the default type family+ -> Name -- ^ Vec Rep+ -> TypeQ -- ^ Quotation of the form @[t| /ctxt/ ⇒ src → rep |]@+ -> ExpQ -- ^ Quotation of an expression of type @src → rep@+ -> ExpQ -- ^ Quotation of an expression of type @rep → src@+ -> DecsQ -- ^ Declarations to be spliced for the derived Unbox instance+derivingVector name cname famName vecRep argsQ toRepQ fromRepQ = do+ Common {..} <- common name+ toRep <- toRepQ+ fromRep <- fromRepQ+ a <- second (AppE toRep) <$> newPatExp "val"+ args <- argsQ+ (cxts, typ, rep) <- case args of+ ForallT _ cxts (ArrowT `AppT` typ `AppT` rep) -> return (cxts, typ, rep)+ ArrowT `AppT` typ `AppT` rep -> return ([], typ, rep)+ _ -> fail "Expecting a type of the form: cxts => typ -> rep"+ s <- newName "s"+ t <- newName "t"+ let newtypeMVector = NewtypeD [] mvName [PlainTV s, PlainTV t]+ (NormalC mvName [(NotStrict, (ConT ''G.Mutable `AppT` + (ConT famName `AppT` (ConT vecRep `AppT` VarT t)))+ `AppT` VarT s `AppT` (ConT vecRep `AppT` VarT t))]) []+ let mvCon = ConE mvName+ let instanceMVector = InstanceD cxts+ (ConT ''M.MVector `AppT` ConT mvName `AppT` typ) $ concat+ [ wrap 'M.basicLength [mv] id+ , wrap 'M.basicUnsafeSlice [i, n, mv] (AppE mvCon)+ , wrap 'M.basicOverlaps [mv, mv'] id+ , wrap 'M.basicUnsafeNew [n] (liftE mvCon)+#if MIN_VERSION_vector(0,11,0)+ , wrap 'M.basicInitialize [mv] id+#endif+ , wrap 'M.basicUnsafeReplicate [n, a] (liftE mvCon)+ , wrap 'M.basicUnsafeRead [mv, i] (liftE fromRep)+ , wrap 'M.basicUnsafeWrite [mv, i, a] id+ , wrap 'M.basicClear [mv] id+ , wrap 'M.basicSet [mv, a] id+ , wrap 'M.basicUnsafeCopy [mv, mv'] id+ , wrap 'M.basicUnsafeMove [mv, mv'] id+ , wrap 'M.basicUnsafeGrow [mv, n] (liftE mvCon) ]++ -- let newtypeVector = NewtypeInstD [] ''Vector [typ]+ -- (NormalC vName [(NotStrict, ConT ''Vector `AppT` rep)]) []+ let newtypeVector = NewtypeD [] vName [PlainTV t]+ (NormalC vName [(NotStrict, ConT famName `AppT` (ConT vecRep `AppT` VarT t) `AppT` (ConT vecRep `AppT` VarT t))]) []+ let vCon = ConE vName+ let instanceVector = InstanceD cxts+ (ConT ''G.Vector `AppT` ConT vName `AppT` typ) $ concat+ [ wrap 'G.basicUnsafeFreeze [mv] (liftE vCon)+ , wrap 'G.basicUnsafeThaw [v] (liftE mvCon)+ , wrap 'G.basicLength [v] id+ , wrap 'G.basicUnsafeSlice [i, n, v] (AppE vCon)+ , wrap 'G.basicUnsafeIndexM [v, i] (liftE fromRep)+ , wrap 'G.basicUnsafeCopy [mv, v] id+ , wrap 'G.elemseq [v, a] id ]++ return + [ -- InstanceD cxts (ConT cname `AppT` typ) []+ newtypeMVector, instanceMVector+ , newtypeVector, instanceVector + , TySynInstD ''G.Mutable (TySynEqn [ConT vName] (ConT mvName))+ ]++#undef __GLASGOW_HASKELL__+{-$usage++Writing @Unbox@ instances for new data types is tedious and formulaic. More+often than not, there is a straightforward mapping of the new type onto some+existing one already imbued with an @Unbox@ instance. The+<http://hackage.haskell.org/package/vector/docs/Data-Vector-Unboxed.html example>+from the @vector@ package represents @Complex a@ as pairs @(a, a)@. Using+'derivingVector', we can define the same instances much more succinctly:++>derivingVector "Complex"+> [t| ∀ a. (Unbox a) ⇒ Complex a → (a, a) |]+> [| \ (r :+ i) → (r, i) |]+> [| \ (r, i) → r :+ i |]++Requires the @MultiParamTypeClasses@, @TemplateHaskell@, @TypeFamilies@ and+probably the @FlexibleInstances@ @LANGUAGE@ extensions. Note that GHC 7.4+(but not earlier nor later) needs the 'G.Vector' and 'M.MVector' class+method names to be in scope in order to define the appropriate instances:++>#if __GLASGOW_HASKELL__ == 704+>import qualified Data.Vector.Generic+>import qualified Data.Vector.Generic.Mutable+>#endif++Consult the <https://github.com/liyang/vector-th-unbox/blob/master/tests/sanity.hs sanity test>+for a working example.++-}+
vinyl-vectors.cabal view
@@ -1,5 +1,5 @@ name: vinyl-vectors-version: 0.1.0.3+version: 0.2.0 synopsis: Vectors for vinyl vectors description: This library provides vectors of vinyl records stored as a structure of arrays. This vectors types provided@@ -22,19 +22,32 @@ library hs-source-dirs: src- exposed-modules: Data.Vector.Vinyl.Default- , Data.Vector.Vinyl.Default.Implication- , Data.Vector.Vinyl.Default.Internal- , Data.Vector.Vinyl.Default.Mutable+ exposed-modules: Data.Vector.Vinyl.Default.Empty.Monomorphic+ , Data.Vector.Vinyl.Default.Empty.Monomorphic.Implication+ , Data.Vector.Vinyl.Default.Empty.Monomorphic.Internal+ , Data.Vector.Vinyl.Default.Empty.Monomorphic.Mutable++ , Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Internal+ , Data.Vector.Vinyl.Default.NonEmpty.Monomorphic.Implication++ , Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Internal+ , Data.Vector.Vinyl.Default.NonEmpty.Polymorphic.Implication++ , Data.Vector.Vinyl.Default.Types+ -- , Data.Vector.Vinyl.Default.Types.Derived+ , Data.Vector.Vinyl.Default.Types.Deriving , Data.Vector.Vinyl.TypeLevel build-depends: base >= 4.7 && < 5 , vinyl >= 0.5.1 && < 0.5.2 , vector >= 0.10 && < 0.12 , primitive >=0.6 && <0.7 , constraints >= 0.4- , text >= 0.8.0.0 + , data-default >= 0.5+ , template-haskell >= 2.5+ , text + , bytestring default-language: Haskell2010- ghc-options: -Wall -O2+ ghc-options: -Wall -O2 executable sorting if !flag(examples)