{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
module Data.Vector.Generic (
Vector(..), Mutable,
length, null,
(!), (!?), head, last,
unsafeIndex, unsafeHead, unsafeLast,
indexM, headM, lastM,
unsafeIndexM, unsafeHeadM, unsafeLastM,
slice, init, tail, take, drop, splitAt, uncons, unsnoc,
unsafeSlice, unsafeInit, unsafeTail, unsafeTake, unsafeDrop,
empty, singleton, replicate, generate, iterateN,
replicateM, generateM, iterateNM, create, createT,
unfoldr, unfoldrN, unfoldrExactN,
unfoldrM, unfoldrNM, unfoldrExactNM,
constructN, constructrN,
enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
cons, snoc, (++), concat, concatNE,
force,
(//), update, update_,
unsafeUpd, unsafeUpdate, unsafeUpdate_,
accum, accumulate, accumulate_,
unsafeAccum, unsafeAccumulate, unsafeAccumulate_,
reverse, backpermute, unsafeBackpermute,
modify,
indexed,
map, imap, concatMap,
mapM, imapM, mapM_, imapM_, forM, forM_,
iforM, iforM_,
zipWith, zipWith3, zipWith4, zipWith5, zipWith6,
izipWith, izipWith3, izipWith4, izipWith5, izipWith6,
zip, zip3, zip4, zip5, zip6,
zipWithM, izipWithM, zipWithM_, izipWithM_,
unzip, unzip3, unzip4, unzip5, unzip6,
filter, ifilter, filterM, uniq,
mapMaybe, imapMaybe,
mapMaybeM, imapMaybeM,
takeWhile, dropWhile,
partition, partitionWith, unstablePartition, span, break, groupBy, group,
elem, notElem, find, findIndex, findIndexR, findIndices, elemIndex, elemIndices,
foldl, foldl1, foldl', foldl1', foldr, foldr1, foldr', foldr1',
ifoldl, ifoldl', ifoldr, ifoldr',
foldMap, foldMap',
all, any, and, or,
sum, product,
maximum, maximumBy, maximumOn,
minimum, minimumBy, minimumOn,
minIndex, minIndexBy, maxIndex, maxIndexBy,
foldM, ifoldM, foldM', ifoldM',
fold1M, fold1M', foldM_, ifoldM_,
foldM'_, ifoldM'_, fold1M_, fold1M'_,
sequence, sequence_,
prescanl, prescanl',
postscanl, postscanl',
scanl, scanl', scanl1, scanl1',
iscanl, iscanl',
prescanr, prescanr',
postscanr, postscanr',
scanr, scanr', scanr1, scanr1',
iscanr, iscanr',
toList, fromList, fromListN,
convert,
freeze, thaw, copy, unsafeFreeze, unsafeThaw, unsafeCopy,
stream, unstream, unstreamM, streamR, unstreamR,
new, clone,
eq, cmp,
eqBy, cmpBy,
showsPrec, readPrec,
liftShowsPrec, liftReadsPrec,
gfoldl, gunfold, dataCast, mkVecType, mkVecConstr, mkType
) where
import Data.Vector.Generic.Base
import qualified Data.Vector.Generic.Mutable as M
import qualified Data.Vector.Generic.New as New
import Data.Vector.Generic.New ( New )
import qualified Data.Vector.Fusion.Bundle as Bundle
import Data.Vector.Fusion.Bundle ( Bundle, MBundle, lift, inplace )
import qualified Data.Vector.Fusion.Bundle.Monadic as MBundle
import Data.Vector.Fusion.Stream.Monadic ( Stream )
import qualified Data.Vector.Fusion.Stream.Monadic as S
import Data.Vector.Fusion.Bundle.Size
import Data.Vector.Fusion.Util
import Data.Vector.Internal.Check
import Control.Monad.ST ( ST, runST )
import Control.Monad.Primitive
import Prelude
( Eq, Ord, Num, Enum, Monoid, Monad, Read, Show, Bool, Ordering(..), Int, Maybe(..), Either, IO, ShowS, ReadS, String
, compare, mempty, mappend, return, fmap, otherwise, id, flip, seq, error, undefined, uncurry, shows, fst, snd, min, max, not
, (>>=), (+), (-), (*), (<), (==), (.), ($), (=<<), (>>), (<$>) )
import qualified Text.Read as Read
import qualified Data.List.NonEmpty as NonEmpty
import Data.Typeable ( Typeable, gcast1 )
#include "vector.h"
import Data.Data ( Data, DataType, Constr, Fixity(Prefix),
mkDataType, mkConstr, constrIndex, mkNoRepType )
import qualified Data.Traversable as T (Traversable(mapM))
length :: Vector v a => v a -> Int
{-# INLINE length #-}
length :: forall (v :: * -> *) a. Vector v a => v a -> Int
length = forall (v :: * -> *) a. Bundle v a -> Int
Bundle.length forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
null :: Vector v a => v a -> Bool
{-# INLINE null #-}
null :: forall (v :: * -> *) a. Vector v a => v a -> Bool
null = forall (v :: * -> *) a. Bundle v a -> Bool
Bundle.null forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
infixl 9 !
(!) :: (HasCallStack, Vector v a) => v a -> Int -> a
{-# INLINE_FUSED (!) #-}
! :: forall (v :: * -> *) a.
(HasCallStack, Vector v a) =>
v a -> Int -> a
(!) v a
v Int
i = forall a. HasCallStack => Checks -> Int -> Int -> a -> a
checkIndex Checks
Bounds Int
i (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v) forall a b. (a -> b) -> a -> b
$ forall a. Box a -> a
unBox (forall (v :: * -> *) a. Vector v a => v a -> Int -> Box a
basicUnsafeIndexM v a
v Int
i)
infixl 9 !?
(!?) :: Vector v a => v a -> Int -> Maybe a
{-# INLINE_FUSED (!?) #-}
v a
v !? :: forall (v :: * -> *) a. Vector v a => v a -> Int -> Maybe a
!? Int
i | Int
i Int -> Int -> Bool
`inRange` forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v = case forall (v :: * -> *) a. Vector v a => v a -> Int -> Box a
basicUnsafeIndexM v a
v Int
i of Box a
a -> forall a. a -> Maybe a
Just a
a
| Bool
otherwise = forall a. Maybe a
Nothing
head :: Vector v a => v a -> a
{-# INLINE_FUSED head #-}
head :: forall (v :: * -> *) a. Vector v a => v a -> a
head v a
v = v a
v forall (v :: * -> *) a.
(HasCallStack, Vector v a) =>
v a -> Int -> a
! Int
0
last :: Vector v a => v a -> a
{-# INLINE_FUSED last #-}
last :: forall (v :: * -> *) a. Vector v a => v a -> a
last v a
v = v a
v forall (v :: * -> *) a.
(HasCallStack, Vector v a) =>
v a -> Int -> a
! (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1)
unsafeIndex :: Vector v a => v a -> Int -> a
{-# INLINE_FUSED unsafeIndex #-}
unsafeIndex :: forall (v :: * -> *) a. Vector v a => v a -> Int -> a
unsafeIndex v a
v Int
i = forall a. HasCallStack => Checks -> Int -> Int -> a -> a
checkIndex Checks
Unsafe Int
i (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v) forall a b. (a -> b) -> a -> b
$ forall a. Box a -> a
unBox (forall (v :: * -> *) a. Vector v a => v a -> Int -> Box a
basicUnsafeIndexM v a
v Int
i)
unsafeHead :: Vector v a => v a -> a
{-# INLINE_FUSED unsafeHead #-}
unsafeHead :: forall (v :: * -> *) a. Vector v a => v a -> a
unsafeHead v a
v = forall (v :: * -> *) a. Vector v a => v a -> Int -> a
unsafeIndex v a
v Int
0
unsafeLast :: Vector v a => v a -> a
{-# INLINE_FUSED unsafeLast #-}
unsafeLast :: forall (v :: * -> *) a. Vector v a => v a -> a
unsafeLast v a
v = forall (v :: * -> *) a. Vector v a => v a -> Int -> a
unsafeIndex v a
v (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1)
{-# RULES
"(!)/unstream [Vector]" forall i s.
new (New.unstream s) ! i = s Bundle.!! i
"(!?)/unstream [Vector]" forall i s.
new (New.unstream s) !? i = s Bundle.!? i
"head/unstream [Vector]" forall s.
head (new (New.unstream s)) = Bundle.head s
"last/unstream [Vector]" forall s.
last (new (New.unstream s)) = Bundle.last s
"unsafeIndex/unstream [Vector]" forall i s.
unsafeIndex (new (New.unstream s)) i = s Bundle.!! i
"unsafeHead/unstream [Vector]" forall s.
unsafeHead (new (New.unstream s)) = Bundle.head s
"unsafeLast/unstream [Vector]" forall s.
unsafeLast (new (New.unstream s)) = Bundle.last s #-}
indexM :: (HasCallStack, Vector v a, Monad m) => v a -> Int -> m a
{-# INLINE_FUSED indexM #-}
indexM :: forall (v :: * -> *) a (m :: * -> *).
(HasCallStack, Vector v a, Monad m) =>
v a -> Int -> m a
indexM v a
v Int
i = forall a. HasCallStack => Checks -> Int -> Int -> a -> a
checkIndex Checks
Bounds Int
i (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. Monad m => Box a -> m a
liftBox forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Int -> Box a
basicUnsafeIndexM v a
v Int
i
headM :: (Vector v a, Monad m) => v a -> m a
{-# INLINE_FUSED headM #-}
headM :: forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> m a
headM v a
v = forall (v :: * -> *) a (m :: * -> *).
(HasCallStack, Vector v a, Monad m) =>
v a -> Int -> m a
indexM v a
v Int
0
lastM :: (Vector v a, Monad m) => v a -> m a
{-# INLINE_FUSED lastM #-}
lastM :: forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> m a
lastM v a
v = forall (v :: * -> *) a (m :: * -> *).
(HasCallStack, Vector v a, Monad m) =>
v a -> Int -> m a
indexM v a
v (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1)
unsafeIndexM :: (Vector v a, Monad m) => v a -> Int -> m a
{-# INLINE_FUSED unsafeIndexM #-}
unsafeIndexM :: forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> Int -> m a
unsafeIndexM v a
v Int
i = forall a. HasCallStack => Checks -> Int -> Int -> a -> a
checkIndex Checks
Unsafe Int
i (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v)
forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. Monad m => Box a -> m a
liftBox
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Int -> Box a
basicUnsafeIndexM v a
v Int
i
unsafeHeadM :: (Vector v a, Monad m) => v a -> m a
{-# INLINE_FUSED unsafeHeadM #-}
unsafeHeadM :: forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> m a
unsafeHeadM v a
v = forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> Int -> m a
unsafeIndexM v a
v Int
0
unsafeLastM :: (Vector v a, Monad m) => v a -> m a
{-# INLINE_FUSED unsafeLastM #-}
unsafeLastM :: forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> m a
unsafeLastM v a
v = forall (v :: * -> *) a (m :: * -> *).
(Vector v a, Monad m) =>
v a -> Int -> m a
unsafeIndexM v a
v (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1)
{-# RULES
"indexM/unstream [Vector]" forall s i.
indexM (new (New.unstream s)) i = lift s MBundle.!! i
"headM/unstream [Vector]" forall s.
headM (new (New.unstream s)) = MBundle.head (lift s)
"lastM/unstream [Vector]" forall s.
lastM (new (New.unstream s)) = MBundle.last (lift s)
"unsafeIndexM/unstream [Vector]" forall s i.
unsafeIndexM (new (New.unstream s)) i = lift s MBundle.!! i
"unsafeHeadM/unstream [Vector]" forall s.
unsafeHeadM (new (New.unstream s)) = MBundle.head (lift s)
"unsafeLastM/unstream [Vector]" forall s.
unsafeLastM (new (New.unstream s)) = MBundle.last (lift s) #-}
slice :: (HasCallStack, Vector v a)
=> Int
-> Int
-> v a
-> v a
{-# INLINE_FUSED slice #-}
slice :: forall (v :: * -> *) a.
(HasCallStack, Vector v a) =>
Int -> Int -> v a -> v a
slice Int
i Int
n v a
v = forall a. HasCallStack => Checks -> Int -> Int -> Int -> a -> a
checkSlice Checks
Bounds Int
i Int
n (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v) forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
basicUnsafeSlice Int
i Int
n v a
v
init :: Vector v a => v a -> v a
{-# INLINE_FUSED init #-}
init :: forall (v :: * -> *) a. Vector v a => v a -> v a
init v a
v = forall (v :: * -> *) a.
(HasCallStack, Vector v a) =>
Int -> Int -> v a -> v a
slice Int
0 (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1) v a
v
tail :: Vector v a => v a -> v a
{-# INLINE_FUSED tail #-}
tail :: forall (v :: * -> *) a. Vector v a => v a -> v a
tail v a
v = forall (v :: * -> *) a.
(HasCallStack, Vector v a) =>
Int -> Int -> v a -> v a
slice Int
1 (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1) v a
v
take :: Vector v a => Int -> v a -> v a
{-# INLINE_FUSED take #-}
take :: forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
take Int
n v a
v = forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
0 (forall a b. (a -> b) -> a -> b
delay_inline forall a. Ord a => a -> a -> a
min Int
n' (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v)) v a
v
where n' :: Int
n' = forall a. Ord a => a -> a -> a
max Int
n Int
0
drop :: Vector v a => Int -> v a -> v a
{-# INLINE_FUSED drop #-}
drop :: forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
drop Int
n v a
v = forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice (forall a b. (a -> b) -> a -> b
delay_inline forall a. Ord a => a -> a -> a
min Int
n' Int
len)
(forall a b. (a -> b) -> a -> b
delay_inline forall a. Ord a => a -> a -> a
max Int
0 (Int
len forall a. Num a => a -> a -> a
- Int
n')) v a
v
where n' :: Int
n' = forall a. Ord a => a -> a -> a
max Int
n Int
0
len :: Int
len = forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v
splitAt :: Vector v a => Int -> v a -> (v a, v a)
{-# INLINE_FUSED splitAt #-}
splitAt :: forall (v :: * -> *) a. Vector v a => Int -> v a -> (v a, v a)
splitAt Int
n v a
v = ( forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
0 Int
m v a
v
, forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
m (forall a b. (a -> b) -> a -> b
delay_inline forall a. Ord a => a -> a -> a
max Int
0 (Int
len forall a. Num a => a -> a -> a
- Int
n')) v a
v
)
where
m :: Int
m = forall a b. (a -> b) -> a -> b
delay_inline forall a. Ord a => a -> a -> a
min Int
n' Int
len
n' :: Int
n' = forall a. Ord a => a -> a -> a
max Int
n Int
0
len :: Int
len = forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v
uncons :: Vector v a => v a -> Maybe (a, v a)
{-# INLINE_FUSED uncons #-}
uncons :: forall (v :: * -> *) a. Vector v a => v a -> Maybe (a, v a)
uncons v a
xs = forall a b c. (a -> b -> c) -> b -> a -> c
flip (,) (forall (v :: * -> *) a. Vector v a => v a -> v a
unsafeTail v a
xs) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> v a
xs forall (v :: * -> *) a. Vector v a => v a -> Int -> Maybe a
!? Int
0
unsnoc :: Vector v a => v a -> Maybe (v a, a)
{-# INLINE_FUSED unsnoc #-}
unsnoc :: forall (v :: * -> *) a. Vector v a => v a -> Maybe (v a, a)
unsnoc v a
xs = (,) (forall (v :: * -> *) a. Vector v a => v a -> v a
unsafeInit v a
xs) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> v a
xs forall (v :: * -> *) a. Vector v a => v a -> Int -> Maybe a
!? (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
xs forall a. Num a => a -> a -> a
- Int
1)
unsafeSlice :: Vector v a => Int
-> Int
-> v a
-> v a
{-# INLINE_FUSED unsafeSlice #-}
unsafeSlice :: forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
i Int
n v a
v = forall a. HasCallStack => Checks -> Int -> Int -> Int -> a -> a
checkSlice Checks
Unsafe Int
i Int
n (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v) forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
basicUnsafeSlice Int
i Int
n v a
v
unsafeInit :: Vector v a => v a -> v a
{-# INLINE_FUSED unsafeInit #-}
unsafeInit :: forall (v :: * -> *) a. Vector v a => v a -> v a
unsafeInit v a
v = forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
0 (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1) v a
v
unsafeTail :: Vector v a => v a -> v a
{-# INLINE_FUSED unsafeTail #-}
unsafeTail :: forall (v :: * -> *) a. Vector v a => v a -> v a
unsafeTail v a
v = forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
1 (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1) v a
v
unsafeTake :: Vector v a => Int -> v a -> v a
{-# INLINE unsafeTake #-}
unsafeTake :: forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
unsafeTake Int
n v a
v = forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
0 Int
n v a
v
unsafeDrop :: Vector v a => Int -> v a -> v a
{-# INLINE unsafeDrop #-}
unsafeDrop :: forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
unsafeDrop Int
n v a
v = forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
n (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
n) v a
v
{-# RULES
"init/new [Vector]" forall p.
init (new p) = new (New.init p)
"tail/new [Vector]" forall p.
tail (new p) = new (New.tail p)
"take/new [Vector]" forall n p.
take n (new p) = new (New.take n p)
"drop/new [Vector]" forall n p.
drop n (new p) = new (New.drop n p)
"unsafeSlice/new [Vector]" forall i n p.
unsafeSlice i n (new p) = new (New.unsafeSlice i n p)
"unsafeInit/new [Vector]" forall p.
unsafeInit (new p) = new (New.unsafeInit p)
"unsafeTail/new [Vector]" forall p.
unsafeTail (new p) = new (New.unsafeTail p) #-}
empty :: Vector v a => v a
{-# INLINE empty #-}
empty :: forall (v :: * -> *) a. Vector v a => v a
empty = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall (v :: * -> *) a. Bundle v a
Bundle.empty
singleton :: forall v a. Vector v a => a -> v a
{-# INLINE singleton #-}
singleton :: forall (v :: * -> *) a. Vector v a => a -> v a
singleton a
x = forall (v :: * -> *) a b. Vector v a => v a -> a -> b -> b
elemseq (forall a. HasCallStack => a
undefined :: v a) a
x
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a (v :: * -> *). a -> Bundle v a
Bundle.singleton a
x)
replicate :: forall v a. Vector v a => Int -> a -> v a
{-# INLINE replicate #-}
replicate :: forall (v :: * -> *) a. Vector v a => Int -> a -> v a
replicate Int
n a
x = forall (v :: * -> *) a b. Vector v a => v a -> a -> b -> b
elemseq (forall a. HasCallStack => a
undefined :: v a) a
x
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall a b. (a -> b) -> a -> b
$ forall a (v :: * -> *). Int -> a -> Bundle v a
Bundle.replicate Int
n a
x
generate :: Vector v a => Int -> (Int -> a) -> v a
{-# INLINE generate #-}
generate :: forall (v :: * -> *) a. Vector v a => Int -> (Int -> a) -> v a
generate Int
n Int -> a
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a (v :: * -> *). Int -> (Int -> a) -> Bundle v a
Bundle.generate Int
n Int -> a
f)
iterateN :: Vector v a => Int -> (a -> a) -> a -> v a
{-# INLINE iterateN #-}
iterateN :: forall (v :: * -> *) a. Vector v a => Int -> (a -> a) -> a -> v a
iterateN Int
n a -> a
f a
x = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a (v :: * -> *). Int -> (a -> a) -> a -> Bundle v a
Bundle.iterateN Int
n a -> a
f a
x)
unfoldr :: Vector v a => (b -> Maybe (a, b)) -> b -> v a
{-# INLINE unfoldr #-}
unfoldr :: forall (v :: * -> *) a b.
Vector v a =>
(b -> Maybe (a, b)) -> b -> v a
unfoldr b -> Maybe (a, b)
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s a (v :: * -> *). (s -> Maybe (a, s)) -> s -> Bundle v a
Bundle.unfoldr b -> Maybe (a, b)
f
unfoldrN :: Vector v a => Int -> (b -> Maybe (a, b)) -> b -> v a
{-# INLINE unfoldrN #-}
unfoldrN :: forall (v :: * -> *) a b.
Vector v a =>
Int -> (b -> Maybe (a, b)) -> b -> v a
unfoldrN Int
n b -> Maybe (a, b)
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s a (v :: * -> *).
Int -> (s -> Maybe (a, s)) -> s -> Bundle v a
Bundle.unfoldrN Int
n b -> Maybe (a, b)
f
unfoldrExactN :: Vector v a => Int -> (b -> (a, b)) -> b -> v a
{-# INLINE unfoldrExactN #-}
unfoldrExactN :: forall (v :: * -> *) a b.
Vector v a =>
Int -> (b -> (a, b)) -> b -> v a
unfoldrExactN Int
n b -> (a, b)
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s a (v :: * -> *). Int -> (s -> (a, s)) -> s -> Bundle v a
Bundle.unfoldrExactN Int
n b -> (a, b)
f
unfoldrM :: (Monad m, Vector v a) => (b -> m (Maybe (a, b))) -> b -> m (v a)
{-# INLINE unfoldrM #-}
unfoldrM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
(b -> m (Maybe (a, b))) -> b -> m (v a)
unfoldrM b -> m (Maybe (a, b))
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) s a (u :: * -> *).
Monad m =>
(s -> m (Maybe (a, s))) -> s -> Bundle m u a
MBundle.unfoldrM b -> m (Maybe (a, b))
f
unfoldrNM :: (Monad m, Vector v a) => Int -> (b -> m (Maybe (a, b))) -> b -> m (v a)
{-# INLINE unfoldrNM #-}
unfoldrNM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
Int -> (b -> m (Maybe (a, b))) -> b -> m (v a)
unfoldrNM Int
n b -> m (Maybe (a, b))
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) s a (u :: * -> *).
Monad m =>
Int -> (s -> m (Maybe (a, s))) -> s -> Bundle m u a
MBundle.unfoldrNM Int
n b -> m (Maybe (a, b))
f
unfoldrExactNM :: (Monad m, Vector v a) => Int -> (b -> m (a, b)) -> b -> m (v a)
{-# INLINE unfoldrExactNM #-}
unfoldrExactNM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
Int -> (b -> m (a, b)) -> b -> m (v a)
unfoldrExactNM Int
n b -> m (a, b)
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) s a (u :: * -> *).
Monad m =>
Int -> (s -> m (a, s)) -> s -> Bundle m u a
MBundle.unfoldrExactNM Int
n b -> m (a, b)
f
constructN :: forall v a. Vector v a => Int -> (v a -> a) -> v a
{-# INLINE constructN #-}
constructN :: forall (v :: * -> *) a. Vector v a => Int -> (v a -> a) -> v a
constructN !Int
n v a -> a
f = forall a. (forall s. ST s a) -> a
runST (
do
Mutable v s a
v <- forall (m :: * -> *) (v :: * -> * -> *) a.
(HasCallStack, PrimMonad m, MVector v a) =>
Int -> m (v (PrimState m) a)
M.new Int
n
v a
v' <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
v
forall s. v a -> Int -> ST s (v a)
fill v a
v' Int
0
)
where
fill :: forall s. v a -> Int -> ST s (v a)
fill :: forall s. v a -> Int -> ST s (v a)
fill !v a
v Int
i | Int
i forall a. Ord a => a -> a -> Bool
< Int
n = let x :: a
x = v a -> a
f (forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
unsafeTake Int
i v a
v)
in forall (v :: * -> *) a b. Vector v a => v a -> a -> b -> b
elemseq v a
v a
x forall a b. (a -> b) -> a -> b
$ do
Mutable v s a
v' <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
v a -> m (Mutable v (PrimState m) a)
unsafeThaw v a
v
forall (m :: * -> *) (v :: * -> * -> *) a.
(PrimMonad m, MVector v a) =>
v (PrimState m) a -> Int -> a -> m ()
M.unsafeWrite Mutable v s a
v' Int
i a
x
v a
v'' <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
v'
forall s. v a -> Int -> ST s (v a)
fill v a
v'' (Int
iforall a. Num a => a -> a -> a
+Int
1)
fill v a
v Int
_ = forall (m :: * -> *) a. Monad m => a -> m a
return v a
v
constructrN :: forall v a. Vector v a => Int -> (v a -> a) -> v a
{-# INLINE constructrN #-}
constructrN :: forall (v :: * -> *) a. Vector v a => Int -> (v a -> a) -> v a
constructrN !Int
n v a -> a
f = forall a. (forall s. ST s a) -> a
runST (
do
Mutable v s a
v <- Int
n seq :: forall a b. a -> b -> b
`seq` forall (m :: * -> *) (v :: * -> * -> *) a.
(HasCallStack, PrimMonad m, MVector v a) =>
Int -> m (v (PrimState m) a)
M.new Int
n
v a
v' <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
v
forall s. v a -> Int -> ST s (v a)
fill v a
v' Int
0
)
where
fill :: forall s. v a -> Int -> ST s (v a)
fill :: forall s. v a -> Int -> ST s (v a)
fill !v a
v Int
i | Int
i forall a. Ord a => a -> a -> Bool
< Int
n = let x :: a
x = v a -> a
f (forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice (Int
nforall a. Num a => a -> a -> a
-Int
i) Int
i v a
v)
in forall (v :: * -> *) a b. Vector v a => v a -> a -> b -> b
elemseq v a
v a
x forall a b. (a -> b) -> a -> b
$ do
Mutable v s a
v' <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
v a -> m (Mutable v (PrimState m) a)
unsafeThaw v a
v
forall (m :: * -> *) (v :: * -> * -> *) a.
(PrimMonad m, MVector v a) =>
v (PrimState m) a -> Int -> a -> m ()
M.unsafeWrite Mutable v s a
v' (Int
nforall a. Num a => a -> a -> a
-Int
iforall a. Num a => a -> a -> a
-Int
1) a
x
v a
v'' <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
v'
forall s. v a -> Int -> ST s (v a)
fill v a
v'' (Int
iforall a. Num a => a -> a -> a
+Int
1)
fill v a
v Int
_ = forall (m :: * -> *) a. Monad m => a -> m a
return v a
v
enumFromN :: (Vector v a, Num a) => a -> Int -> v a
{-# INLINE enumFromN #-}
enumFromN :: forall (v :: * -> *) a. (Vector v a, Num a) => a -> Int -> v a
enumFromN a
x Int
n = forall (v :: * -> *) a. (Vector v a, Num a) => a -> a -> Int -> v a
enumFromStepN a
x a
1 Int
n
enumFromStepN :: forall v a. (Vector v a, Num a) => a -> a -> Int -> v a
{-# INLINE enumFromStepN #-}
enumFromStepN :: forall (v :: * -> *) a. (Vector v a, Num a) => a -> a -> Int -> v a
enumFromStepN a
x a
y Int
n = forall (v :: * -> *) a b. Vector v a => v a -> a -> b -> b
elemseq (forall a. HasCallStack => a
undefined :: v a) a
x
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a b. Vector v a => v a -> a -> b -> b
elemseq (forall a. HasCallStack => a
undefined :: v a) a
y
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall a b. (a -> b) -> a -> b
$ forall a (v :: * -> *). Num a => a -> a -> Int -> Bundle v a
Bundle.enumFromStepN a
x a
y Int
n
enumFromTo :: (Vector v a, Enum a) => a -> a -> v a
{-# INLINE enumFromTo #-}
enumFromTo :: forall (v :: * -> *) a. (Vector v a, Enum a) => a -> a -> v a
enumFromTo a
x a
y = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a (v :: * -> *). Enum a => a -> a -> Bundle v a
Bundle.enumFromTo a
x a
y)
enumFromThenTo :: (Vector v a, Enum a) => a -> a -> a -> v a
{-# INLINE enumFromThenTo #-}
enumFromThenTo :: forall (v :: * -> *) a. (Vector v a, Enum a) => a -> a -> a -> v a
enumFromThenTo a
x a
y a
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a (v :: * -> *). Enum a => a -> a -> a -> Bundle v a
Bundle.enumFromThenTo a
x a
y a
z)
cons :: forall v a. Vector v a => a -> v a -> v a
{-# INLINE cons #-}
cons :: forall (v :: * -> *) a. Vector v a => a -> v a -> v a
cons a
x v a
v = forall (v :: * -> *) a b. Vector v a => v a -> a -> b -> b
elemseq (forall a. HasCallStack => a
undefined :: v a) a
x
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall a b. (a -> b) -> a -> b
$ forall a (v :: * -> *). a -> Bundle v a -> Bundle v a
Bundle.cons a
x
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
v
snoc :: forall v a. Vector v a => v a -> a -> v a
{-# INLINE snoc #-}
snoc :: forall (v :: * -> *) a. Vector v a => v a -> a -> v a
snoc v a
v a
x = forall (v :: * -> *) a b. Vector v a => v a -> a -> b -> b
elemseq (forall a. HasCallStack => a
undefined :: v a) a
x
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Bundle v a -> a -> Bundle v a
Bundle.snoc (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
v) a
x
infixr 5 ++
(++) :: Vector v a => v a -> v a -> v a
{-# INLINE (++) #-}
v a
v ++ :: forall (v :: * -> *) a. Vector v a => v a -> v a -> v a
++ v a
w = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
v forall (v :: * -> *) a. Bundle v a -> Bundle v a -> Bundle v a
Bundle.++ forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
w)
concat :: Vector v a => [v a] -> v a
{-# INLINE concat #-}
concat :: forall (v :: * -> *) a. Vector v a => [v a] -> v a
concat = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => [v a] -> Bundle v a
Bundle.fromVectors
concatNE :: Vector v a => NonEmpty.NonEmpty (v a) -> v a
concatNE :: forall (v :: * -> *) a. Vector v a => NonEmpty (v a) -> v a
concatNE = forall (v :: * -> *) a. Vector v a => [v a] -> v a
concat forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. NonEmpty a -> [a]
NonEmpty.toList
replicateM :: (Monad m, Vector v a) => Int -> m a -> m (v a)
{-# INLINE replicateM #-}
replicateM :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
Int -> m a -> m (v a)
replicateM Int
n m a
m = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM (forall (m :: * -> *) a (v :: * -> *).
Monad m =>
Int -> m a -> Bundle m v a
MBundle.replicateM Int
n m a
m)
generateM :: (Monad m, Vector v a) => Int -> (Int -> m a) -> m (v a)
{-# INLINE generateM #-}
generateM :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
Int -> (Int -> m a) -> m (v a)
generateM Int
n Int -> m a
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM (forall (m :: * -> *) a (v :: * -> *).
Monad m =>
Int -> (Int -> m a) -> Bundle m v a
MBundle.generateM Int
n Int -> m a
f)
iterateNM :: (Monad m, Vector v a) => Int -> (a -> m a) -> a -> m (v a)
{-# INLINE iterateNM #-}
iterateNM :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
Int -> (a -> m a) -> a -> m (v a)
iterateNM Int
n a -> m a
f a
x = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM (forall (m :: * -> *) a (u :: * -> *).
Monad m =>
Int -> (a -> m a) -> a -> Bundle m u a
MBundle.iterateNM Int
n a -> m a
f a
x)
create :: Vector v a => (forall s. ST s (Mutable v s a)) -> v a
{-# INLINE create #-}
create :: forall (v :: * -> *) a.
Vector v a =>
(forall s. ST s (Mutable v s a)) -> v a
create forall s. ST s (Mutable v s a)
p = forall (v :: * -> *) a. Vector v a => New v a -> v a
new (forall (v :: * -> *) a. (forall s. ST s (Mutable v s a)) -> New v a
New.create forall s. ST s (Mutable v s a)
p)
createT
:: (T.Traversable f, Vector v a)
=> (forall s. ST s (f (Mutable v s a))) -> f (v a)
{-# INLINE createT #-}
createT :: forall (f :: * -> *) (v :: * -> *) a.
(Traversable f, Vector v a) =>
(forall s. ST s (f (Mutable v s a))) -> f (v a)
createT forall s. ST s (f (Mutable v s a))
p = forall a. (forall s. ST s a) -> a
runST (forall s. ST s (f (Mutable v s a))
p forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
T.mapM forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze)
force :: Vector v a => v a -> v a
{-# INLINE_FUSED force #-}
force :: forall (v :: * -> *) a. Vector v a => v a -> v a
force v a
v = forall (v :: * -> *) a. Vector v a => New v a -> v a
new (forall (v :: * -> *) a. Vector v a => v a -> New v a
clone v a
v)
(//) :: Vector v a => v a
-> [(Int, a)]
-> v a
{-# INLINE (//) #-}
v a
v // :: forall (v :: * -> *) a. Vector v a => v a -> [(Int, a)] -> v a
// [(Int, a)]
us = forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u (Int, a) -> v a
update_stream v a
v (forall a (v :: * -> *). [a] -> Bundle v a
Bundle.fromList [(Int, a)]
us)
update :: (Vector v a, Vector v (Int, a))
=> v a
-> v (Int, a)
-> v a
{-# INLINE update #-}
update :: forall (v :: * -> *) a.
(Vector v a, Vector v (Int, a)) =>
v a -> v (Int, a) -> v a
update v a
v v (Int, a)
w = forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u (Int, a) -> v a
update_stream v a
v (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v (Int, a)
w)
update_ :: (Vector v a, Vector v Int)
=> v a
-> v Int
-> v a
-> v a
{-# INLINE update_ #-}
update_ :: forall (v :: * -> *) a.
(Vector v a, Vector v Int) =>
v a -> v Int -> v a -> v a
update_ v a
v v Int
is v a
w = forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u (Int, a) -> v a
update_stream v a
v (forall a b c (v :: * -> *).
(a -> b -> c) -> Bundle v a -> Bundle v b -> Bundle v c
Bundle.zipWith (,) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v Int
is) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
w))
update_stream :: Vector v a => v a -> Bundle u (Int,a) -> v a
{-# INLINE update_stream #-}
update_stream :: forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u (Int, a) -> v a
update_stream = forall (v :: * -> *) a (u :: * -> *) b.
Vector v a =>
(forall s. Mutable v s a -> Bundle u b -> ST s ())
-> v a -> Bundle u b -> v a
modifyWithBundle forall (m :: * -> *) (v :: * -> * -> *) a (u :: * -> *).
(HasCallStack, PrimMonad m, MVector v a) =>
v (PrimState m) a -> Bundle u (Int, a) -> m ()
M.update
unsafeUpd :: Vector v a => v a -> [(Int, a)] -> v a
{-# INLINE unsafeUpd #-}
unsafeUpd :: forall (v :: * -> *) a. Vector v a => v a -> [(Int, a)] -> v a
unsafeUpd v a
v [(Int, a)]
us = forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u (Int, a) -> v a
unsafeUpdate_stream v a
v (forall a (v :: * -> *). [a] -> Bundle v a
Bundle.fromList [(Int, a)]
us)
unsafeUpdate :: (Vector v a, Vector v (Int, a)) => v a -> v (Int, a) -> v a
{-# INLINE unsafeUpdate #-}
unsafeUpdate :: forall (v :: * -> *) a.
(Vector v a, Vector v (Int, a)) =>
v a -> v (Int, a) -> v a
unsafeUpdate v a
v v (Int, a)
w = forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u (Int, a) -> v a
unsafeUpdate_stream v a
v (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v (Int, a)
w)
unsafeUpdate_ :: (Vector v a, Vector v Int) => v a -> v Int -> v a -> v a
{-# INLINE unsafeUpdate_ #-}
unsafeUpdate_ :: forall (v :: * -> *) a.
(Vector v a, Vector v Int) =>
v a -> v Int -> v a -> v a
unsafeUpdate_ v a
v v Int
is v a
w
= forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u (Int, a) -> v a
unsafeUpdate_stream v a
v (forall a b c (v :: * -> *).
(a -> b -> c) -> Bundle v a -> Bundle v b -> Bundle v c
Bundle.zipWith (,) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v Int
is) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
w))
unsafeUpdate_stream :: Vector v a => v a -> Bundle u (Int,a) -> v a
{-# INLINE unsafeUpdate_stream #-}
unsafeUpdate_stream :: forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u (Int, a) -> v a
unsafeUpdate_stream = forall (v :: * -> *) a (u :: * -> *) b.
Vector v a =>
(forall s. Mutable v s a -> Bundle u b -> ST s ())
-> v a -> Bundle u b -> v a
modifyWithBundle forall (m :: * -> *) (v :: * -> * -> *) a (u :: * -> *).
(PrimMonad m, MVector v a) =>
v (PrimState m) a -> Bundle u (Int, a) -> m ()
M.unsafeUpdate
accum :: Vector v a
=> (a -> b -> a)
-> v a
-> [(Int,b)]
-> v a
{-# INLINE accum #-}
accum :: forall (v :: * -> *) a b.
Vector v a =>
(a -> b -> a) -> v a -> [(Int, b)] -> v a
accum a -> b -> a
f v a
v [(Int, b)]
us = forall (v :: * -> *) a b (u :: * -> *).
Vector v a =>
(a -> b -> a) -> v a -> Bundle u (Int, b) -> v a
accum_stream a -> b -> a
f v a
v (forall a (v :: * -> *). [a] -> Bundle v a
Bundle.fromList [(Int, b)]
us)
accumulate :: (Vector v a, Vector v (Int, b))
=> (a -> b -> a)
-> v a
-> v (Int,b)
-> v a
{-# INLINE accumulate #-}
accumulate :: forall (v :: * -> *) a b.
(Vector v a, Vector v (Int, b)) =>
(a -> b -> a) -> v a -> v (Int, b) -> v a
accumulate a -> b -> a
f v a
v v (Int, b)
us = forall (v :: * -> *) a b (u :: * -> *).
Vector v a =>
(a -> b -> a) -> v a -> Bundle u (Int, b) -> v a
accum_stream a -> b -> a
f v a
v (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v (Int, b)
us)
accumulate_ :: (Vector v a, Vector v Int, Vector v b)
=> (a -> b -> a)
-> v a
-> v Int
-> v b
-> v a
{-# INLINE accumulate_ #-}
accumulate_ :: forall (v :: * -> *) a b.
(Vector v a, Vector v Int, Vector v b) =>
(a -> b -> a) -> v a -> v Int -> v b -> v a
accumulate_ a -> b -> a
f v a
v v Int
is v b
xs = forall (v :: * -> *) a b (u :: * -> *).
Vector v a =>
(a -> b -> a) -> v a -> Bundle u (Int, b) -> v a
accum_stream a -> b -> a
f v a
v (forall a b c (v :: * -> *).
(a -> b -> c) -> Bundle v a -> Bundle v b -> Bundle v c
Bundle.zipWith (,) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v Int
is)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
xs))
accum_stream :: Vector v a => (a -> b -> a) -> v a -> Bundle u (Int,b) -> v a
{-# INLINE accum_stream #-}
accum_stream :: forall (v :: * -> *) a b (u :: * -> *).
Vector v a =>
(a -> b -> a) -> v a -> Bundle u (Int, b) -> v a
accum_stream a -> b -> a
f = forall (v :: * -> *) a (u :: * -> *) b.
Vector v a =>
(forall s. Mutable v s a -> Bundle u b -> ST s ())
-> v a -> Bundle u b -> v a
modifyWithBundle (forall (m :: * -> *) (v :: * -> * -> *) a b (u :: * -> *).
(HasCallStack, PrimMonad m, MVector v a) =>
(a -> b -> a) -> v (PrimState m) a -> Bundle u (Int, b) -> m ()
M.accum a -> b -> a
f)
unsafeAccum :: Vector v a => (a -> b -> a) -> v a -> [(Int,b)] -> v a
{-# INLINE unsafeAccum #-}
unsafeAccum :: forall (v :: * -> *) a b.
Vector v a =>
(a -> b -> a) -> v a -> [(Int, b)] -> v a
unsafeAccum a -> b -> a
f v a
v [(Int, b)]
us = forall (v :: * -> *) a b (u :: * -> *).
Vector v a =>
(a -> b -> a) -> v a -> Bundle u (Int, b) -> v a
unsafeAccum_stream a -> b -> a
f v a
v (forall a (v :: * -> *). [a] -> Bundle v a
Bundle.fromList [(Int, b)]
us)
unsafeAccumulate :: (Vector v a, Vector v (Int, b))
=> (a -> b -> a) -> v a -> v (Int,b) -> v a
{-# INLINE unsafeAccumulate #-}
unsafeAccumulate :: forall (v :: * -> *) a b.
(Vector v a, Vector v (Int, b)) =>
(a -> b -> a) -> v a -> v (Int, b) -> v a
unsafeAccumulate a -> b -> a
f v a
v v (Int, b)
us = forall (v :: * -> *) a b (u :: * -> *).
Vector v a =>
(a -> b -> a) -> v a -> Bundle u (Int, b) -> v a
unsafeAccum_stream a -> b -> a
f v a
v (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v (Int, b)
us)
unsafeAccumulate_ :: (Vector v a, Vector v Int, Vector v b)
=> (a -> b -> a) -> v a -> v Int -> v b -> v a
{-# INLINE unsafeAccumulate_ #-}
unsafeAccumulate_ :: forall (v :: * -> *) a b.
(Vector v a, Vector v Int, Vector v b) =>
(a -> b -> a) -> v a -> v Int -> v b -> v a
unsafeAccumulate_ a -> b -> a
f v a
v v Int
is v b
xs
= forall (v :: * -> *) a b (u :: * -> *).
Vector v a =>
(a -> b -> a) -> v a -> Bundle u (Int, b) -> v a
unsafeAccum_stream a -> b -> a
f v a
v (forall a b c (v :: * -> *).
(a -> b -> c) -> Bundle v a -> Bundle v b -> Bundle v c
Bundle.zipWith (,) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v Int
is) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
xs))
unsafeAccum_stream
:: Vector v a => (a -> b -> a) -> v a -> Bundle u (Int,b) -> v a
{-# INLINE unsafeAccum_stream #-}
unsafeAccum_stream :: forall (v :: * -> *) a b (u :: * -> *).
Vector v a =>
(a -> b -> a) -> v a -> Bundle u (Int, b) -> v a
unsafeAccum_stream a -> b -> a
f = forall (v :: * -> *) a (u :: * -> *) b.
Vector v a =>
(forall s. Mutable v s a -> Bundle u b -> ST s ())
-> v a -> Bundle u b -> v a
modifyWithBundle (forall (m :: * -> *) (v :: * -> * -> *) a b (u :: * -> *).
(PrimMonad m, MVector v a) =>
(a -> b -> a) -> v (PrimState m) a -> Bundle u (Int, b) -> m ()
M.unsafeAccum a -> b -> a
f)
reverse :: (Vector v a) => v a -> v a
{-# INLINE reverse #-}
reverse :: forall (v :: * -> *) a. Vector v a => v a -> v a
reverse = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
backpermute :: forall v a. (HasCallStack, Vector v a, Vector v Int)
=> v a
-> v Int
-> v a
{-# INLINE backpermute #-}
backpermute :: forall (v :: * -> *) a.
(HasCallStack, Vector v a, Vector v Int) =>
v a -> v Int -> v a
backpermute v a
v v Int
is = seq :: forall a b. a -> b -> b
seq v a
v
forall a b. (a -> b) -> a -> b
$ seq :: forall a b. a -> b -> b
seq Int
n
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Bundle v (Box a) -> Bundle v a
Bundle.unbox
forall a b. (a -> b) -> a -> b
$ forall a b (v :: * -> *). (a -> b) -> Bundle v a -> Bundle v b
Bundle.map HasCallStack => Int -> Box a
index
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v Int
is
where
n :: Int
n = forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v
{-# INLINE index #-}
index :: HasCallStack => Int -> Box a
index :: HasCallStack => Int -> Box a
index Int
i = forall a. HasCallStack => Checks -> Int -> Int -> a -> a
checkIndex Checks
Bounds Int
i Int
n forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Int -> Box a
basicUnsafeIndexM v a
v Int
i
unsafeBackpermute :: (Vector v a, Vector v Int) => v a -> v Int -> v a
{-# INLINE unsafeBackpermute #-}
unsafeBackpermute :: forall (v :: * -> *) a.
(Vector v a, Vector v Int) =>
v a -> v Int -> v a
unsafeBackpermute v a
v v Int
is = seq :: forall a b. a -> b -> b
seq v a
v
forall a b. (a -> b) -> a -> b
$ seq :: forall a b. a -> b -> b
seq Int
n
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Bundle v (Box a) -> Bundle v a
Bundle.unbox
forall a b. (a -> b) -> a -> b
$ forall a b (v :: * -> *). (a -> b) -> Bundle v a -> Bundle v b
Bundle.map Int -> Box a
index
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v Int
is
where
n :: Int
n = forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v
{-# INLINE index #-}
index :: Int -> Box a
index Int
i = forall a. HasCallStack => Checks -> Int -> Int -> a -> a
checkIndex Checks
Unsafe Int
i Int
n forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Int -> Box a
basicUnsafeIndexM v a
v Int
i
modify :: Vector v a => (forall s. Mutable v s a -> ST s ()) -> v a -> v a
{-# INLINE modify #-}
modify :: forall (v :: * -> *) a.
Vector v a =>
(forall s. Mutable v s a -> ST s ()) -> v a -> v a
modify forall s. Mutable v s a -> ST s ()
p = forall (v :: * -> *) a. Vector v a => New v a -> v a
new forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a.
(forall s. Mutable v s a -> ST s ()) -> New v a -> New v a
New.modify forall s. Mutable v s a -> ST s ()
p forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> New v a
clone
modifyWithBundle :: Vector v a
=> (forall s. Mutable v s a -> Bundle u b -> ST s ())
-> v a -> Bundle u b -> v a
{-# INLINE modifyWithBundle #-}
modifyWithBundle :: forall (v :: * -> *) a (u :: * -> *) b.
Vector v a =>
(forall s. Mutable v s a -> Bundle u b -> ST s ())
-> v a -> Bundle u b -> v a
modifyWithBundle forall s. Mutable v s a -> Bundle u b -> ST s ()
p v a
v Bundle u b
s = forall (v :: * -> *) a. Vector v a => New v a -> v a
new (forall (v :: * -> *) a (u :: * -> *) b.
(forall s. Mutable v s a -> Bundle u b -> ST s ())
-> New v a -> Bundle u b -> New v a
New.modifyWithBundle forall s. Mutable v s a -> Bundle u b -> ST s ()
p (forall (v :: * -> *) a. Vector v a => v a -> New v a
clone v a
v) Bundle u b
s)
indexed :: (Vector v a, Vector v (Int,a)) => v a -> v (Int,a)
{-# INLINE indexed #-}
indexed :: forall (v :: * -> *) a.
(Vector v a, Vector v (Int, a)) =>
v a -> v (Int, a)
indexed = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
map :: (Vector v a, Vector v b) => (a -> b) -> v a -> v b
{-# INLINE map #-}
map :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map a -> b
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b) -> Stream m a -> Stream m b
S.map a -> b
f) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
imap :: (Vector v a, Vector v b) => (Int -> a -> b) -> v a -> v b
{-# INLINE imap #-}
imap :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(Int -> a -> b) -> v a -> v b
imap Int -> a -> b
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b) -> Stream m a -> Stream m b
S.map (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b
f) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => Stream m a -> Stream m (Int, a)
S.indexed) forall a. a -> a
id
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
concatMap :: (Vector v a, Vector v b) => (a -> v b) -> v a -> v b
{-# INLINE concatMap #-}
concatMap :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> v b) -> v a -> v b
concatMap a -> v b
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
Bundle u (v a) -> Bundle v a
Bundle.concatVectors
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *). (a -> b) -> Bundle v a -> Bundle v b
Bundle.map a -> v b
f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
mapM :: (Monad m, Vector v a, Vector v b) => (a -> m b) -> v a -> m (v b)
{-# INLINE mapM #-}
mapM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
(a -> m b) -> v a -> m (v b)
mapM a -> m b
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> m b) -> Bundle v a -> Bundle m v b
Bundle.mapM a -> m b
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
imapM :: (Monad m, Vector v a, Vector v b)
=> (Int -> a -> m b) -> v a -> m (v b)
imapM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
(Int -> a -> m b) -> v a -> m (v b)
imapM Int -> a -> m b
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> m b) -> Bundle v a -> Bundle m v b
Bundle.mapM (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> m b
f) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
mapM_ :: (Monad m, Vector v a) => (a -> m b) -> v a -> m ()
{-# INLINE mapM_ #-}
mapM_ :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
(a -> m b) -> v a -> m ()
mapM_ a -> m b
f = forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> m b) -> Bundle v a -> m ()
Bundle.mapM_ a -> m b
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
imapM_ :: (Monad m, Vector v a) => (Int -> a -> m b) -> v a -> m ()
{-# INLINE imapM_ #-}
imapM_ :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
(Int -> a -> m b) -> v a -> m ()
imapM_ Int -> a -> m b
f = forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> m b) -> Bundle v a -> m ()
Bundle.mapM_ (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> m b
f) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
forM :: (Monad m, Vector v a, Vector v b) => v a -> (a -> m b) -> m (v b)
{-# INLINE forM #-}
forM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
v a -> (a -> m b) -> m (v b)
forM v a
as a -> m b
f = forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
(a -> m b) -> v a -> m (v b)
mapM a -> m b
f v a
as
forM_ :: (Monad m, Vector v a) => v a -> (a -> m b) -> m ()
{-# INLINE forM_ #-}
forM_ :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
v a -> (a -> m b) -> m ()
forM_ v a
as a -> m b
f = forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
(a -> m b) -> v a -> m ()
mapM_ a -> m b
f v a
as
iforM :: (Monad m, Vector v a, Vector v b) => v a -> (Int -> a -> m b) -> m (v b)
{-# INLINE iforM #-}
iforM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
v a -> (Int -> a -> m b) -> m (v b)
iforM v a
as Int -> a -> m b
f = forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
(Int -> a -> m b) -> v a -> m (v b)
imapM Int -> a -> m b
f v a
as
iforM_ :: (Monad m, Vector v a) => v a -> (Int -> a -> m b) -> m ()
{-# INLINE iforM_ #-}
iforM_ :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
v a -> (Int -> a -> m b) -> m ()
iforM_ v a
as Int -> a -> m b
f = forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
(Int -> a -> m b) -> v a -> m ()
imapM_ Int -> a -> m b
f v a
as
zipWith :: (Vector v a, Vector v b, Vector v c)
=> (a -> b -> c) -> v a -> v b -> v c
{-# INLINE zipWith #-}
zipWith :: forall (v :: * -> *) a b c.
(Vector v a, Vector v b, Vector v c) =>
(a -> b -> c) -> v a -> v b -> v c
zipWith a -> b -> c
f = \v a
xs v b
ys -> forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c (v :: * -> *).
(a -> b -> c) -> Bundle v a -> Bundle v b -> Bundle v c
Bundle.zipWith a -> b -> c
f (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
xs) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
ys))
zipWith3 :: (Vector v a, Vector v b, Vector v c, Vector v d)
=> (a -> b -> c -> d) -> v a -> v b -> v c -> v d
{-# INLINE zipWith3 #-}
zipWith3 :: forall (v :: * -> *) a b c d.
(Vector v a, Vector v b, Vector v c, Vector v d) =>
(a -> b -> c -> d) -> v a -> v b -> v c -> v d
zipWith3 a -> b -> c -> d
f = \v a
as v b
bs v c
cs -> forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c d (v :: * -> *).
(a -> b -> c -> d)
-> Bundle v a -> Bundle v b -> Bundle v c -> Bundle v d
Bundle.zipWith3 a -> b -> c -> d
f (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v c
cs))
zipWith4 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e)
=> (a -> b -> c -> d -> e) -> v a -> v b -> v c -> v d -> v e
{-# INLINE zipWith4 #-}
zipWith4 :: forall (v :: * -> *) a b c d e.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e) =>
(a -> b -> c -> d -> e) -> v a -> v b -> v c -> v d -> v e
zipWith4 a -> b -> c -> d -> e
f = \v a
as v b
bs v c
cs v d
ds ->
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c d e (v :: * -> *).
(a -> b -> c -> d -> e)
-> Bundle v a
-> Bundle v b
-> Bundle v c
-> Bundle v d
-> Bundle v e
Bundle.zipWith4 a -> b -> c -> d -> e
f (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v c
cs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v d
ds))
zipWith5 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f)
=> (a -> b -> c -> d -> e -> f) -> v a -> v b -> v c -> v d -> v e
-> v f
{-# INLINE zipWith5 #-}
zipWith5 :: forall (v :: * -> *) a b c d e f.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f) =>
(a -> b -> c -> d -> e -> f)
-> v a -> v b -> v c -> v d -> v e -> v f
zipWith5 a -> b -> c -> d -> e -> f
f = \v a
as v b
bs v c
cs v d
ds v e
es ->
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c d e f (v :: * -> *).
(a -> b -> c -> d -> e -> f)
-> Bundle v a
-> Bundle v b
-> Bundle v c
-> Bundle v d
-> Bundle v e
-> Bundle v f
Bundle.zipWith5 a -> b -> c -> d -> e -> f
f (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v c
cs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v d
ds)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v e
es))
zipWith6 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v g)
=> (a -> b -> c -> d -> e -> f -> g)
-> v a -> v b -> v c -> v d -> v e -> v f -> v g
{-# INLINE zipWith6 #-}
zipWith6 :: forall (v :: * -> *) a b c d e f g.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v g) =>
(a -> b -> c -> d -> e -> f -> g)
-> v a -> v b -> v c -> v d -> v e -> v f -> v g
zipWith6 a -> b -> c -> d -> e -> f -> g
f = \v a
as v b
bs v c
cs v d
ds v e
es v f
fs ->
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c d e f g (v :: * -> *).
(a -> b -> c -> d -> e -> f -> g)
-> Bundle v a
-> Bundle v b
-> Bundle v c
-> Bundle v d
-> Bundle v e
-> Bundle v f
-> Bundle v g
Bundle.zipWith6 a -> b -> c -> d -> e -> f -> g
f (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v c
cs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v d
ds)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v e
es)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v f
fs))
izipWith :: (Vector v a, Vector v b, Vector v c)
=> (Int -> a -> b -> c) -> v a -> v b -> v c
{-# INLINE izipWith #-}
izipWith :: forall (v :: * -> *) a b c.
(Vector v a, Vector v b, Vector v c) =>
(Int -> a -> b -> c) -> v a -> v b -> v c
izipWith Int -> a -> b -> c
f = \v a
xs v b
ys ->
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c (v :: * -> *).
(a -> b -> c) -> Bundle v a -> Bundle v b -> Bundle v c
Bundle.zipWith (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> c
f) (forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
xs))
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
ys))
izipWith3 :: (Vector v a, Vector v b, Vector v c, Vector v d)
=> (Int -> a -> b -> c -> d) -> v a -> v b -> v c -> v d
{-# INLINE izipWith3 #-}
izipWith3 :: forall (v :: * -> *) a b c d.
(Vector v a, Vector v b, Vector v c, Vector v d) =>
(Int -> a -> b -> c -> d) -> v a -> v b -> v c -> v d
izipWith3 Int -> a -> b -> c -> d
f = \v a
as v b
bs v c
cs ->
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c d (v :: * -> *).
(a -> b -> c -> d)
-> Bundle v a -> Bundle v b -> Bundle v c -> Bundle v d
Bundle.zipWith3 (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> c -> d
f) (forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as))
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v c
cs))
izipWith4 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e)
=> (Int -> a -> b -> c -> d -> e) -> v a -> v b -> v c -> v d -> v e
{-# INLINE izipWith4 #-}
izipWith4 :: forall (v :: * -> *) a b c d e.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e) =>
(Int -> a -> b -> c -> d -> e) -> v a -> v b -> v c -> v d -> v e
izipWith4 Int -> a -> b -> c -> d -> e
f = \v a
as v b
bs v c
cs v d
ds ->
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c d e (v :: * -> *).
(a -> b -> c -> d -> e)
-> Bundle v a
-> Bundle v b
-> Bundle v c
-> Bundle v d
-> Bundle v e
Bundle.zipWith4 (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> c -> d -> e
f) (forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as))
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v c
cs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v d
ds))
izipWith5 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f)
=> (Int -> a -> b -> c -> d -> e -> f) -> v a -> v b -> v c -> v d
-> v e -> v f
{-# INLINE izipWith5 #-}
izipWith5 :: forall (v :: * -> *) a b c d e f.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f) =>
(Int -> a -> b -> c -> d -> e -> f)
-> v a -> v b -> v c -> v d -> v e -> v f
izipWith5 Int -> a -> b -> c -> d -> e -> f
f = \v a
as v b
bs v c
cs v d
ds v e
es ->
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c d e f (v :: * -> *).
(a -> b -> c -> d -> e -> f)
-> Bundle v a
-> Bundle v b
-> Bundle v c
-> Bundle v d
-> Bundle v e
-> Bundle v f
Bundle.zipWith5 (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> c -> d -> e -> f
f) (forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as))
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v c
cs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v d
ds)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v e
es))
izipWith6 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v g)
=> (Int -> a -> b -> c -> d -> e -> f -> g)
-> v a -> v b -> v c -> v d -> v e -> v f -> v g
{-# INLINE izipWith6 #-}
izipWith6 :: forall (v :: * -> *) a b c d e f g.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v g) =>
(Int -> a -> b -> c -> d -> e -> f -> g)
-> v a -> v b -> v c -> v d -> v e -> v f -> v g
izipWith6 Int -> a -> b -> c -> d -> e -> f -> g
f = \v a
as v b
bs v c
cs v d
ds v e
es v f
fs ->
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream (forall a b c d e f g (v :: * -> *).
(a -> b -> c -> d -> e -> f -> g)
-> Bundle v a
-> Bundle v b
-> Bundle v c
-> Bundle v d
-> Bundle v e
-> Bundle v f
-> Bundle v g
Bundle.zipWith6 (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> c -> d -> e -> f -> g
f) (forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as))
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v c
cs)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v d
ds)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v e
es)
(forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v f
fs))
zip :: (Vector v a, Vector v b, Vector v (a,b)) => v a -> v b -> v (a, b)
{-# INLINE zip #-}
zip :: forall (v :: * -> *) a b.
(Vector v a, Vector v b, Vector v (a, b)) =>
v a -> v b -> v (a, b)
zip = forall (v :: * -> *) a b c.
(Vector v a, Vector v b, Vector v c) =>
(a -> b -> c) -> v a -> v b -> v c
zipWith (,)
zip3 :: (Vector v a, Vector v b, Vector v c, Vector v (a, b, c))
=> v a -> v b -> v c -> v (a, b, c)
{-# INLINE zip3 #-}
zip3 :: forall (v :: * -> *) a b c.
(Vector v a, Vector v b, Vector v c, Vector v (a, b, c)) =>
v a -> v b -> v c -> v (a, b, c)
zip3 = forall (v :: * -> *) a b c d.
(Vector v a, Vector v b, Vector v c, Vector v d) =>
(a -> b -> c -> d) -> v a -> v b -> v c -> v d
zipWith3 (,,)
zip4 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v (a, b, c, d))
=> v a -> v b -> v c -> v d -> v (a, b, c, d)
{-# INLINE zip4 #-}
zip4 :: forall (v :: * -> *) a b c d.
(Vector v a, Vector v b, Vector v c, Vector v d,
Vector v (a, b, c, d)) =>
v a -> v b -> v c -> v d -> v (a, b, c, d)
zip4 = forall (v :: * -> *) a b c d e.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e) =>
(a -> b -> c -> d -> e) -> v a -> v b -> v c -> v d -> v e
zipWith4 (,,,)
zip5 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v (a, b, c, d, e))
=> v a -> v b -> v c -> v d -> v e -> v (a, b, c, d, e)
{-# INLINE zip5 #-}
zip5 :: forall (v :: * -> *) a b c d e.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v (a, b, c, d, e)) =>
v a -> v b -> v c -> v d -> v e -> v (a, b, c, d, e)
zip5 = forall (v :: * -> *) a b c d e f.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f) =>
(a -> b -> c -> d -> e -> f)
-> v a -> v b -> v c -> v d -> v e -> v f
zipWith5 (,,,,)
zip6 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v (a, b, c, d, e, f))
=> v a -> v b -> v c -> v d -> v e -> v f -> v (a, b, c, d, e, f)
{-# INLINE zip6 #-}
zip6 :: forall (v :: * -> *) a b c d e f.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v (a, b, c, d, e, f)) =>
v a -> v b -> v c -> v d -> v e -> v f -> v (a, b, c, d, e, f)
zip6 = forall (v :: * -> *) a b c d e f g.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v g) =>
(a -> b -> c -> d -> e -> f -> g)
-> v a -> v b -> v c -> v d -> v e -> v f -> v g
zipWith6 (,,,,,)
zipWithM :: (Monad m, Vector v a, Vector v b, Vector v c)
=> (a -> b -> m c) -> v a -> v b -> m (v c)
{-# INLINE zipWithM #-}
zipWithM :: forall (m :: * -> *) (v :: * -> *) a b c.
(Monad m, Vector v a, Vector v b, Vector v c) =>
(a -> b -> m c) -> v a -> v b -> m (v c)
zipWithM a -> b -> m c
f = \v a
as v b
bs -> forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a b c (v :: * -> *).
Monad m =>
(a -> b -> m c) -> Bundle v a -> Bundle v b -> Bundle m v c
Bundle.zipWithM a -> b -> m c
f (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
izipWithM :: (Monad m, Vector v a, Vector v b, Vector v c)
=> (Int -> a -> b -> m c) -> v a -> v b -> m (v c)
{-# INLINE izipWithM #-}
izipWithM :: forall (m :: * -> *) (v :: * -> *) a b c.
(Monad m, Vector v a, Vector v b, Vector v c) =>
(Int -> a -> b -> m c) -> v a -> v b -> m (v c)
izipWithM Int -> a -> b -> m c
m v a
as v b
bs = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b c (v :: * -> *).
Monad m =>
(a -> b -> m c) -> Bundle v a -> Bundle v b -> Bundle m v c
Bundle.zipWithM (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> m c
m)
(forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as))
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs
zipWithM_ :: (Monad m, Vector v a, Vector v b)
=> (a -> b -> m c) -> v a -> v b -> m ()
{-# INLINE zipWithM_ #-}
zipWithM_ :: forall (m :: * -> *) (v :: * -> *) a b c.
(Monad m, Vector v a, Vector v b) =>
(a -> b -> m c) -> v a -> v b -> m ()
zipWithM_ a -> b -> m c
f = \v a
as v b
bs -> forall (m :: * -> *) a b c (v :: * -> *).
Monad m =>
(a -> b -> m c) -> Bundle v a -> Bundle v b -> m ()
Bundle.zipWithM_ a -> b -> m c
f (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs)
izipWithM_ :: (Monad m, Vector v a, Vector v b)
=> (Int -> a -> b -> m c) -> v a -> v b -> m ()
{-# INLINE izipWithM_ #-}
izipWithM_ :: forall (m :: * -> *) (v :: * -> *) a b c.
(Monad m, Vector v a, Vector v b) =>
(Int -> a -> b -> m c) -> v a -> v b -> m ()
izipWithM_ Int -> a -> b -> m c
m v a
as v b
bs = forall (m :: * -> *) a b c (v :: * -> *).
Monad m =>
(a -> b -> m c) -> Bundle v a -> Bundle v b -> m ()
Bundle.zipWithM_ (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> m c
m)
(forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
as))
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
bs
unzip :: (Vector v a, Vector v b, Vector v (a,b)) => v (a, b) -> (v a, v b)
{-# INLINE unzip #-}
unzip :: forall (v :: * -> *) a b.
(Vector v a, Vector v b, Vector v (a, b)) =>
v (a, b) -> (v a, v b)
unzip v (a, b)
xs = (forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map forall a b. (a, b) -> a
fst v (a, b)
xs, forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map forall a b. (a, b) -> b
snd v (a, b)
xs)
unzip3 :: (Vector v a, Vector v b, Vector v c, Vector v (a, b, c))
=> v (a, b, c) -> (v a, v b, v c)
{-# INLINE unzip3 #-}
unzip3 :: forall (v :: * -> *) a b c.
(Vector v a, Vector v b, Vector v c, Vector v (a, b, c)) =>
v (a, b, c) -> (v a, v b, v c)
unzip3 v (a, b, c)
xs = (forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
a, b
_, c
_) -> a
a) v (a, b, c)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
b, c
_) -> b
b) v (a, b, c)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
c) -> c
c) v (a, b, c)
xs)
unzip4 :: (Vector v a, Vector v b, Vector v c, Vector v d,
Vector v (a, b, c, d))
=> v (a, b, c, d) -> (v a, v b, v c, v d)
{-# INLINE unzip4 #-}
unzip4 :: forall (v :: * -> *) a b c d.
(Vector v a, Vector v b, Vector v c, Vector v d,
Vector v (a, b, c, d)) =>
v (a, b, c, d) -> (v a, v b, v c, v d)
unzip4 v (a, b, c, d)
xs = (forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
a, b
_, c
_, d
_) -> a
a) v (a, b, c, d)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
b, c
_, d
_) -> b
b) v (a, b, c, d)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
c, d
_) -> c
c) v (a, b, c, d)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
_, d
d) -> d
d) v (a, b, c, d)
xs)
unzip5 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v (a, b, c, d, e))
=> v (a, b, c, d, e) -> (v a, v b, v c, v d, v e)
{-# INLINE unzip5 #-}
unzip5 :: forall (v :: * -> *) a b c d e.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v (a, b, c, d, e)) =>
v (a, b, c, d, e) -> (v a, v b, v c, v d, v e)
unzip5 v (a, b, c, d, e)
xs = (forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
a, b
_, c
_, d
_, e
_) -> a
a) v (a, b, c, d, e)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
b, c
_, d
_, e
_) -> b
b) v (a, b, c, d, e)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
c, d
_, e
_) -> c
c) v (a, b, c, d, e)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
_, d
d, e
_) -> d
d) v (a, b, c, d, e)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
_, d
_, e
e) -> e
e) v (a, b, c, d, e)
xs)
unzip6 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v (a, b, c, d, e, f))
=> v (a, b, c, d, e, f) -> (v a, v b, v c, v d, v e, v f)
{-# INLINE unzip6 #-}
unzip6 :: forall (v :: * -> *) a b c d e f.
(Vector v a, Vector v b, Vector v c, Vector v d, Vector v e,
Vector v f, Vector v (a, b, c, d, e, f)) =>
v (a, b, c, d, e, f) -> (v a, v b, v c, v d, v e, v f)
unzip6 v (a, b, c, d, e, f)
xs = (forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
a, b
_, c
_, d
_, e
_, f
_) -> a
a) v (a, b, c, d, e, f)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
b, c
_, d
_, e
_, f
_) -> b
b) v (a, b, c, d, e, f)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
c, d
_, e
_, f
_) -> c
c) v (a, b, c, d, e, f)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
_, d
d, e
_, f
_) -> d
d) v (a, b, c, d, e, f)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
_, d
_, e
e, f
_) -> e
e) v (a, b, c, d, e, f)
xs,
forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b) -> v a -> v b
map (\(a
_, b
_, c
_, d
_, e
_, f
f) -> f
f) v (a, b, c, d, e, f)
xs)
filter :: Vector v a => (a -> Bool) -> v a -> v a
{-# INLINE filter #-}
filter :: forall (v :: * -> *) a. Vector v a => (a -> Bool) -> v a -> v a
filter a -> Bool
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a.
Monad m =>
(a -> Bool) -> Stream m a -> Stream m a
S.filter a -> Bool
f) Size -> Size
toMax forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
ifilter :: Vector v a => (Int -> a -> Bool) -> v a -> v a
{-# INLINE ifilter #-}
ifilter :: forall (v :: * -> *) a.
Vector v a =>
(Int -> a -> Bool) -> v a -> v a
ifilter Int -> a -> Bool
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b) -> Stream m a -> Stream m b
S.map forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a.
Monad m =>
(a -> Bool) -> Stream m a -> Stream m a
S.filter (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> Bool
f) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => Stream m a -> Stream m (Int, a)
S.indexed) Size -> Size
toMax
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
uniq :: (Vector v a, Eq a) => v a -> v a
{-# INLINE uniq #-}
uniq :: forall (v :: * -> *) a. (Vector v a, Eq a) => v a -> v a
uniq = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace forall a (m :: * -> *). (Eq a, Monad m) => Stream m a -> Stream m a
S.uniq Size -> Size
toMax forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
mapMaybe :: (Vector v a, Vector v b) => (a -> Maybe b) -> v a -> v b
{-# INLINE mapMaybe #-}
mapMaybe :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> Maybe b) -> v a -> v b
mapMaybe a -> Maybe b
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> Maybe b) -> Stream m a -> Stream m b
S.mapMaybe a -> Maybe b
f) Size -> Size
toMax forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
imapMaybe :: (Vector v a, Vector v b) => (Int -> a -> Maybe b) -> v a -> v b
{-# INLINE imapMaybe #-}
imapMaybe :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(Int -> a -> Maybe b) -> v a -> v b
imapMaybe Int -> a -> Maybe b
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> Maybe b) -> Stream m a -> Stream m b
S.mapMaybe (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> Maybe b
f) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => Stream m a -> Stream m (Int, a)
S.indexed) Size -> Size
toMax
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
filterM :: (Monad m, Vector v a) => (a -> m Bool) -> v a -> m (v a)
{-# INLINE filterM #-}
filterM :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
(a -> m Bool) -> v a -> m (v a)
filterM a -> m Bool
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a (v :: * -> *).
Monad m =>
(a -> m Bool) -> Bundle v a -> Bundle m v a
Bundle.filterM a -> m Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
mapMaybeM :: (Monad m, Vector v a, Vector v b) => (a -> m (Maybe b)) -> v a -> m (v b)
{-# INLINE mapMaybeM #-}
mapMaybeM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
(a -> m (Maybe b)) -> v a -> m (v b)
mapMaybeM a -> m (Maybe b)
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> m (Maybe b)) -> Bundle v a -> Bundle m v b
Bundle.mapMaybeM a -> m (Maybe b)
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
imapMaybeM :: (Monad m, Vector v a, Vector v b)
=> (Int -> a -> m (Maybe b)) -> v a -> m (v b)
{-# INLINE imapMaybeM #-}
imapMaybeM :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
(Int -> a -> m (Maybe b)) -> v a -> m (v b)
imapMaybeM Int -> a -> m (Maybe b)
f = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> m (Maybe b)) -> Bundle v a -> Bundle m v b
Bundle.mapMaybeM (\(Int
i, a
a) -> Int -> a -> m (Maybe b)
f Int
i a
a) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
takeWhile :: Vector v a => (a -> Bool) -> v a -> v a
{-# INLINE takeWhile #-}
takeWhile :: forall (v :: * -> *) a. Vector v a => (a -> Bool) -> v a -> v a
takeWhile a -> Bool
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a (v :: * -> *). (a -> Bool) -> Bundle v a -> Bundle v a
Bundle.takeWhile a -> Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
dropWhile :: Vector v a => (a -> Bool) -> v a -> v a
{-# INLINE_FUSED dropWhile #-}
dropWhile :: forall (v :: * -> *) a. Vector v a => (a -> Bool) -> v a -> v a
dropWhile a -> Bool
f v a
xs = case forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> Maybe Int
findIndex (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Bool
f) v a
xs of
Just Int
i -> forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
unsafeDrop Int
i v a
xs
Maybe Int
Nothing -> forall (v :: * -> *) a. Vector v a => v a
empty
{-# RULES
"dropWhile/unstream [Vector]" forall f p.
dropWhile f (new (New.unstream p)) = new (New.unstream (Bundle.dropWhile f p))
#-}
partition :: Vector v a => (a -> Bool) -> v a -> (v a, v a)
{-# INLINE partition #-}
partition :: forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> (v a, v a)
partition a -> Bool
f = forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
(a -> Bool) -> Bundle u a -> (v a, v a)
partition_stream a -> Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
partition_stream :: Vector v a => (a -> Bool) -> Bundle u a -> (v a, v a)
{-# INLINE_FUSED partition_stream #-}
partition_stream :: forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
(a -> Bool) -> Bundle u a -> (v a, v a)
partition_stream a -> Bool
f Bundle u a
s = Bundle u a
s seq :: forall a b. a -> b -> b
`seq` forall a. (forall s. ST s a) -> a
runST (
do
(Mutable v s a
mv1,Mutable v s a
mv2) <- forall (m :: * -> *) (v :: * -> * -> *) a (u :: * -> *).
(PrimMonad m, MVector v a) =>
(a -> Bool)
-> Bundle u a -> m (v (PrimState m) a, v (PrimState m) a)
M.partitionBundle a -> Bool
f Bundle u a
s
v a
v1 <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
mv1
v a
v2 <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
mv2
forall (m :: * -> *) a. Monad m => a -> m a
return (v a
v1,v a
v2))
partitionWith :: (Vector v a, Vector v b, Vector v c) => (a -> Either b c) -> v a -> (v b, v c)
{-# INLINE partitionWith #-}
partitionWith :: forall (v :: * -> *) a b c.
(Vector v a, Vector v b, Vector v c) =>
(a -> Either b c) -> v a -> (v b, v c)
partitionWith a -> Either b c
f = forall (v :: * -> *) a b c (u :: * -> *).
(Vector v a, Vector v b, Vector v c) =>
(a -> Either b c) -> Bundle u a -> (v b, v c)
partition_with_stream a -> Either b c
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
partition_with_stream :: (Vector v a, Vector v b, Vector v c) => (a -> Either b c) -> Bundle u a -> (v b, v c)
{-# INLINE_FUSED partition_with_stream #-}
partition_with_stream :: forall (v :: * -> *) a b c (u :: * -> *).
(Vector v a, Vector v b, Vector v c) =>
(a -> Either b c) -> Bundle u a -> (v b, v c)
partition_with_stream a -> Either b c
f Bundle u a
s = Bundle u a
s seq :: forall a b. a -> b -> b
`seq` forall a. (forall s. ST s a) -> a
runST (
do
(Mutable v s b
mv1,Mutable v s c
mv2) <- forall (m :: * -> *) (v :: * -> * -> *) a b c (u :: * -> *).
(PrimMonad m, MVector v a, MVector v b, MVector v c) =>
(a -> Either b c)
-> Bundle u a -> m (v (PrimState m) b, v (PrimState m) c)
M.partitionWithBundle a -> Either b c
f Bundle u a
s
v b
v1 <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s b
mv1
v c
v2 <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s c
mv2
forall (m :: * -> *) a. Monad m => a -> m a
return (v b
v1,v c
v2))
unstablePartition :: Vector v a => (a -> Bool) -> v a -> (v a, v a)
{-# INLINE unstablePartition #-}
unstablePartition :: forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> (v a, v a)
unstablePartition a -> Bool
f = forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
(a -> Bool) -> Bundle u a -> (v a, v a)
unstablePartition_stream a -> Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
unstablePartition_stream
:: Vector v a => (a -> Bool) -> Bundle u a -> (v a, v a)
{-# INLINE_FUSED unstablePartition_stream #-}
unstablePartition_stream :: forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
(a -> Bool) -> Bundle u a -> (v a, v a)
unstablePartition_stream a -> Bool
f Bundle u a
s = Bundle u a
s seq :: forall a b. a -> b -> b
`seq` forall a. (forall s. ST s a) -> a
runST (
do
(Mutable v s a
mv1,Mutable v s a
mv2) <- forall (m :: * -> *) (v :: * -> * -> *) a (u :: * -> *).
(PrimMonad m, MVector v a) =>
(a -> Bool)
-> Bundle u a -> m (v (PrimState m) a, v (PrimState m) a)
M.unstablePartitionBundle a -> Bool
f Bundle u a
s
v a
v1 <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
mv1
v a
v2 <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
mv2
forall (m :: * -> *) a. Monad m => a -> m a
return (v a
v1,v a
v2))
unstablePartition_new :: Vector v a => (a -> Bool) -> New v a -> (v a, v a)
{-# INLINE_FUSED unstablePartition_new #-}
unstablePartition_new :: forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> New v a -> (v a, v a)
unstablePartition_new a -> Bool
f (New.New forall s. ST s (Mutable v s a)
p) = forall a. (forall s. ST s a) -> a
runST (
do
Mutable v s a
mv <- forall s. ST s (Mutable v s a)
p
Int
i <- forall (m :: * -> *) (v :: * -> * -> *) a.
(PrimMonad m, MVector v a) =>
(a -> Bool) -> v (PrimState m) a -> m Int
M.unstablePartition a -> Bool
f Mutable v s a
mv
v a
v <- forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze Mutable v s a
mv
forall (m :: * -> *) a. Monad m => a -> m a
return (forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
unsafeTake Int
i v a
v, forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
unsafeDrop Int
i v a
v))
{-# RULES
"unstablePartition" forall f p.
unstablePartition_stream f (stream (new p))
= unstablePartition_new f p #-}
span :: Vector v a => (a -> Bool) -> v a -> (v a, v a)
{-# INLINE span #-}
span :: forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> (v a, v a)
span a -> Bool
f = forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> (v a, v a)
break (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Bool
f)
break :: Vector v a => (a -> Bool) -> v a -> (v a, v a)
{-# INLINE break #-}
break :: forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> (v a, v a)
break a -> Bool
f v a
xs = case forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> Maybe Int
findIndex a -> Bool
f v a
xs of
Just Int
i -> (forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
0 Int
i v a
xs, forall (v :: * -> *) a. Vector v a => Int -> Int -> v a -> v a
unsafeSlice Int
i (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
xs forall a. Num a => a -> a -> a
- Int
i) v a
xs)
Maybe Int
Nothing -> (v a
xs, forall (v :: * -> *) a. Vector v a => v a
empty)
{-# INLINE groupBy #-}
groupBy :: (Vector v a) => (a -> a -> Bool) -> v a -> [v a]
groupBy :: forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Bool) -> v a -> [v a]
groupBy a -> a -> Bool
_ v a
v | forall (v :: * -> *) a. Vector v a => v a -> Bool
null v a
v = []
groupBy a -> a -> Bool
f v a
v =
let h :: a
h = forall (v :: * -> *) a. Vector v a => v a -> a
unsafeHead v a
v
tl :: v a
tl = forall (v :: * -> *) a. Vector v a => v a -> v a
unsafeTail v a
v
in case forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> Maybe Int
findIndex (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> a -> Bool
f a
h) v a
tl of
Maybe Int
Nothing -> [v a
v]
Just Int
n -> forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
unsafeTake (Int
n forall a. Num a => a -> a -> a
+ Int
1) v a
v forall a. a -> [a] -> [a]
: forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Bool) -> v a -> [v a]
groupBy a -> a -> Bool
f (forall (v :: * -> *) a. Vector v a => Int -> v a -> v a
unsafeDrop (Int
n forall a. Num a => a -> a -> a
+ Int
1) v a
v)
group :: (Vector v a , Eq a) => v a -> [v a]
{-# INLINE group #-}
group :: forall (v :: * -> *) a. (Vector v a, Eq a) => v a -> [v a]
group = forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Bool) -> v a -> [v a]
groupBy forall a. Eq a => a -> a -> Bool
(==)
infix 4 `elem`
elem :: (Vector v a, Eq a) => a -> v a -> Bool
{-# INLINE elem #-}
elem :: forall (v :: * -> *) a. (Vector v a, Eq a) => a -> v a -> Bool
elem a
x = forall a (v :: * -> *). Eq a => a -> Bundle v a -> Bool
Bundle.elem a
x forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
infix 4 `notElem`
notElem :: (Vector v a, Eq a) => a -> v a -> Bool
{-# INLINE notElem #-}
notElem :: forall (v :: * -> *) a. (Vector v a, Eq a) => a -> v a -> Bool
notElem a
x = forall a (v :: * -> *). Eq a => a -> Bundle v a -> Bool
Bundle.notElem a
x forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
find :: Vector v a => (a -> Bool) -> v a -> Maybe a
{-# INLINE find #-}
find :: forall (v :: * -> *) a. Vector v a => (a -> Bool) -> v a -> Maybe a
find a -> Bool
f = forall a (v :: * -> *). (a -> Bool) -> Bundle v a -> Maybe a
Bundle.find a -> Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
findIndex :: Vector v a => (a -> Bool) -> v a -> Maybe Int
{-# INLINE findIndex #-}
findIndex :: forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> Maybe Int
findIndex a -> Bool
f = forall a (v :: * -> *). (a -> Bool) -> Bundle v a -> Maybe Int
Bundle.findIndex a -> Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
findIndexR :: Vector v a => (a -> Bool) -> v a -> Maybe Int
{-# INLINE findIndexR #-}
findIndexR :: forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> Maybe Int
findIndexR a -> Bool
f v a
v = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v forall a. Num a => a -> a -> a
- Int
1 forall a. Num a => a -> a -> a
-) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a (v :: * -> *). (a -> Bool) -> Bundle v a -> Maybe Int
Bundle.findIndex a -> Bool
f forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR v a
v
findIndices :: (Vector v a, Vector v Int) => (a -> Bool) -> v a -> v Int
{-# INLINE findIndices #-}
findIndices :: forall (v :: * -> *) a.
(Vector v a, Vector v Int) =>
(a -> Bool) -> v a -> v Int
findIndices a -> Bool
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b) -> Stream m a -> Stream m b
S.map forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a.
Monad m =>
(a -> Bool) -> Stream m a -> Stream m a
S.filter (a -> Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => Stream m a -> Stream m (Int, a)
S.indexed) Size -> Size
toMax
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
elemIndex :: (Vector v a, Eq a) => a -> v a -> Maybe Int
{-# INLINE elemIndex #-}
elemIndex :: forall (v :: * -> *) a. (Vector v a, Eq a) => a -> v a -> Maybe Int
elemIndex a
x = forall (v :: * -> *) a.
Vector v a =>
(a -> Bool) -> v a -> Maybe Int
findIndex (a
x forall a. Eq a => a -> a -> Bool
==)
elemIndices :: (Vector v a, Vector v Int, Eq a) => a -> v a -> v Int
{-# INLINE elemIndices #-}
elemIndices :: forall (v :: * -> *) a.
(Vector v a, Vector v Int, Eq a) =>
a -> v a -> v Int
elemIndices a
x = forall (v :: * -> *) a.
(Vector v a, Vector v Int) =>
(a -> Bool) -> v a -> v Int
findIndices (a
x forall a. Eq a => a -> a -> Bool
==)
foldl :: Vector v b => (a -> b -> a) -> a -> v b -> a
{-# INLINE foldl #-}
foldl :: forall (v :: * -> *) b a.
Vector v b =>
(a -> b -> a) -> a -> v b -> a
foldl a -> b -> a
f a
z = forall a b (v :: * -> *). (a -> b -> a) -> a -> Bundle v b -> a
Bundle.foldl a -> b -> a
f a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
foldl1 :: Vector v a => (a -> a -> a) -> v a -> a
{-# INLINE foldl1 #-}
foldl1 :: forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> a
foldl1 a -> a -> a
f = forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1 a -> a -> a
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
foldl' :: Vector v b => (a -> b -> a) -> a -> v b -> a
{-# INLINE foldl' #-}
foldl' :: forall (v :: * -> *) b a.
Vector v b =>
(a -> b -> a) -> a -> v b -> a
foldl' a -> b -> a
f a
z = forall a b (v :: * -> *). (a -> b -> a) -> a -> Bundle v b -> a
Bundle.foldl' a -> b -> a
f a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
foldl1' :: Vector v a => (a -> a -> a) -> v a -> a
{-# INLINE foldl1' #-}
foldl1' :: forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> a
foldl1' a -> a -> a
f = forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' a -> a -> a
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
foldr :: Vector v a => (a -> b -> b) -> b -> v a -> b
{-# INLINE foldr #-}
foldr :: forall (v :: * -> *) a b.
Vector v a =>
(a -> b -> b) -> b -> v a -> b
foldr a -> b -> b
f b
z = forall a b (v :: * -> *). (a -> b -> b) -> b -> Bundle v a -> b
Bundle.foldr a -> b -> b
f b
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
foldr1 :: Vector v a => (a -> a -> a) -> v a -> a
{-# INLINE foldr1 #-}
foldr1 :: forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> a
foldr1 a -> a -> a
f = forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldr1 a -> a -> a
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
foldr' :: Vector v a => (a -> b -> b) -> b -> v a -> b
{-# INLINE foldr' #-}
foldr' :: forall (v :: * -> *) a b.
Vector v a =>
(a -> b -> b) -> b -> v a -> b
foldr' a -> b -> b
f b
z = forall a b (v :: * -> *). (a -> b -> a) -> a -> Bundle v b -> a
Bundle.foldl' (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> b -> b
f) b
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
foldr1' :: Vector v a => (a -> a -> a) -> v a -> a
{-# INLINE foldr1' #-}
foldr1' :: forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> a
foldr1' a -> a -> a
f = forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> a -> a
f) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
ifoldl :: Vector v b => (a -> Int -> b -> a) -> a -> v b -> a
{-# INLINE ifoldl #-}
ifoldl :: forall (v :: * -> *) b a.
Vector v b =>
(a -> Int -> b -> a) -> a -> v b -> a
ifoldl a -> Int -> b -> a
f a
z = forall a b (v :: * -> *). (a -> b -> a) -> a -> Bundle v b -> a
Bundle.foldl (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Int -> b -> a
f) a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
ifoldl' :: Vector v b => (a -> Int -> b -> a) -> a -> v b -> a
{-# INLINE ifoldl' #-}
ifoldl' :: forall (v :: * -> *) b a.
Vector v b =>
(a -> Int -> b -> a) -> a -> v b -> a
ifoldl' a -> Int -> b -> a
f a
z = forall a b (v :: * -> *). (a -> b -> a) -> a -> Bundle v b -> a
Bundle.foldl' (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Int -> b -> a
f) a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
ifoldr :: Vector v a => (Int -> a -> b -> b) -> b -> v a -> b
{-# INLINE ifoldr #-}
ifoldr :: forall (v :: * -> *) a b.
Vector v a =>
(Int -> a -> b -> b) -> b -> v a -> b
ifoldr Int -> a -> b -> b
f b
z = forall a b (v :: * -> *). (a -> b -> b) -> b -> Bundle v a -> b
Bundle.foldr (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> b
f) b
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
ifoldr' :: Vector v a => (Int -> a -> b -> b) -> b -> v a -> b
{-# INLINE ifoldr' #-}
ifoldr' :: forall (v :: * -> *) a b.
Vector v a =>
(Int -> a -> b -> b) -> b -> v a -> b
ifoldr' Int -> a -> b -> b
f b
z v a
xs = forall a b (v :: * -> *). (a -> b -> a) -> a -> Bundle v b -> a
Bundle.foldl' (forall a b c. (a -> b -> c) -> b -> a -> c
flip (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> b
f)) b
z
forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Int -> Bundle v a -> Bundle v (Int, a)
Bundle.indexedR (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
xs) forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR v a
xs
foldMap :: (Monoid m, Vector v a) => (a -> m) -> v a -> m
{-# INLINE foldMap #-}
foldMap :: forall m (v :: * -> *) a.
(Monoid m, Vector v a) =>
(a -> m) -> v a -> m
foldMap a -> m
f = forall (v :: * -> *) a b.
Vector v a =>
(a -> b -> b) -> b -> v a -> b
foldr (forall a. Monoid a => a -> a -> a
mappend forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> m
f) forall a. Monoid a => a
mempty
foldMap' :: (Monoid m, Vector v a) => (a -> m) -> v a -> m
{-# INLINE foldMap' #-}
foldMap' :: forall m (v :: * -> *) a.
(Monoid m, Vector v a) =>
(a -> m) -> v a -> m
foldMap' a -> m
f = forall (v :: * -> *) b a.
Vector v b =>
(a -> b -> a) -> a -> v b -> a
foldl' (\m
acc a
a -> m
acc forall a. Monoid a => a -> a -> a
`mappend` a -> m
f a
a) forall a. Monoid a => a
mempty
all :: Vector v a => (a -> Bool) -> v a -> Bool
{-# INLINE all #-}
all :: forall (v :: * -> *) a. Vector v a => (a -> Bool) -> v a -> Bool
all a -> Bool
f = forall (v :: * -> *). Bundle v Bool -> Bool
Bundle.and forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *). (a -> b) -> Bundle v a -> Bundle v b
Bundle.map a -> Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
any :: Vector v a => (a -> Bool) -> v a -> Bool
{-# INLINE any #-}
any :: forall (v :: * -> *) a. Vector v a => (a -> Bool) -> v a -> Bool
any a -> Bool
f = forall (v :: * -> *). Bundle v Bool -> Bool
Bundle.or forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *). (a -> b) -> Bundle v a -> Bundle v b
Bundle.map a -> Bool
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
and :: Vector v Bool => v Bool -> Bool
{-# INLINE and #-}
and :: forall (v :: * -> *). Vector v Bool => v Bool -> Bool
and = forall (v :: * -> *). Bundle v Bool -> Bool
Bundle.and forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
or :: Vector v Bool => v Bool -> Bool
{-# INLINE or #-}
or :: forall (v :: * -> *). Vector v Bool => v Bool -> Bool
or = forall (v :: * -> *). Bundle v Bool -> Bool
Bundle.or forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
sum :: (Vector v a, Num a) => v a -> a
{-# INLINE sum #-}
sum :: forall (v :: * -> *) a. (Vector v a, Num a) => v a -> a
sum = forall a b (v :: * -> *). (a -> b -> a) -> a -> Bundle v b -> a
Bundle.foldl' forall a. Num a => a -> a -> a
(+) a
0 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
product :: (Vector v a, Num a) => v a -> a
{-# INLINE product #-}
product :: forall (v :: * -> *) a. (Vector v a, Num a) => v a -> a
product = forall a b (v :: * -> *). (a -> b -> a) -> a -> Bundle v b -> a
Bundle.foldl' forall a. Num a => a -> a -> a
(*) a
1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
maximum :: (Vector v a, Ord a) => v a -> a
{-# INLINE maximum #-}
maximum :: forall (v :: * -> *) a. (Vector v a, Ord a) => v a -> a
maximum = forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' forall a. Ord a => a -> a -> a
max forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
maximumBy :: Vector v a => (a -> a -> Ordering) -> v a -> a
{-# INLINE maximumBy #-}
maximumBy :: forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Ordering) -> v a -> a
maximumBy a -> a -> Ordering
cmpr = forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' a -> a -> a
maxBy forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
where
{-# INLINE maxBy #-}
maxBy :: a -> a -> a
maxBy a
x a
y = case a -> a -> Ordering
cmpr a
x a
y of
Ordering
LT -> a
y
Ordering
_ -> a
x
maximumOn :: (Ord b, Vector v a) => (a -> b) -> v a -> a
{-# INLINE maximumOn #-}
maximumOn :: forall b (v :: * -> *) a.
(Ord b, Vector v a) =>
(a -> b) -> v a -> a
maximumOn a -> b
f = forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' forall {a} {a}. Ord a => (a, a) -> (a, a) -> (a, a)
maxBy forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *). (a -> b) -> Bundle v a -> Bundle v b
Bundle.map (\a
a -> (a
a, a -> b
f a
a)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
where
{-# INLINE maxBy #-}
maxBy :: (a, a) -> (a, a) -> (a, a)
maxBy (a, a)
x (a, a)
y = case forall a. Ord a => a -> a -> Ordering
compare (forall a b. (a, b) -> b
snd (a, a)
x) (forall a b. (a, b) -> b
snd (a, a)
y) of
Ordering
LT -> (a, a)
y
Ordering
_ -> (a, a)
x
minimum :: (Vector v a, Ord a) => v a -> a
{-# INLINE minimum #-}
minimum :: forall (v :: * -> *) a. (Vector v a, Ord a) => v a -> a
minimum = forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' forall a. Ord a => a -> a -> a
min forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
minimumBy :: Vector v a => (a -> a -> Ordering) -> v a -> a
{-# INLINE minimumBy #-}
minimumBy :: forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Ordering) -> v a -> a
minimumBy a -> a -> Ordering
cmpr = forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' a -> a -> a
minBy forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
where
{-# INLINE minBy #-}
minBy :: a -> a -> a
minBy a
x a
y = case a -> a -> Ordering
cmpr a
x a
y of
Ordering
GT -> a
y
Ordering
_ -> a
x
minimumOn :: (Ord b, Vector v a) => (a -> b) -> v a -> a
{-# INLINE minimumOn #-}
minimumOn :: forall b (v :: * -> *) a.
(Ord b, Vector v a) =>
(a -> b) -> v a -> a
minimumOn a -> b
f = forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' forall {a} {a}. Ord a => (a, a) -> (a, a) -> (a, a)
minBy forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *). (a -> b) -> Bundle v a -> Bundle v b
Bundle.map (\a
a -> (a
a, a -> b
f a
a)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
where
{-# INLINE minBy #-}
minBy :: (a, a) -> (a, a) -> (a, a)
minBy (a, a)
x (a, a)
y = case forall a. Ord a => a -> a -> Ordering
compare (forall a b. (a, b) -> b
snd (a, a)
x) (forall a b. (a, b) -> b
snd (a, a)
y) of
Ordering
GT -> (a, a)
y
Ordering
_ -> (a, a)
x
maxIndex :: (Vector v a, Ord a) => v a -> Int
{-# INLINE maxIndex #-}
maxIndex :: forall (v :: * -> *) a. (Vector v a, Ord a) => v a -> Int
maxIndex = forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Ordering) -> v a -> Int
maxIndexBy forall a. Ord a => a -> a -> Ordering
compare
maxIndexBy :: Vector v a => (a -> a -> Ordering) -> v a -> Int
{-# INLINE maxIndexBy #-}
maxIndexBy :: forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Ordering) -> v a -> Int
maxIndexBy a -> a -> Ordering
cmpr = forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' (Int, a) -> (Int, a) -> (Int, a)
imax forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
where
imax :: (Int, a) -> (Int, a) -> (Int, a)
imax (Int
i,a
x) (Int
j,a
y) = Int
i seq :: forall a b. a -> b -> b
`seq` Int
j seq :: forall a b. a -> b -> b
`seq`
case a -> a -> Ordering
cmpr a
x a
y of
Ordering
LT -> (Int
j,a
y)
Ordering
_ -> (Int
i,a
x)
minIndex :: (Vector v a, Ord a) => v a -> Int
{-# INLINE minIndex #-}
minIndex :: forall (v :: * -> *) a. (Vector v a, Ord a) => v a -> Int
minIndex = forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Ordering) -> v a -> Int
minIndexBy forall a. Ord a => a -> a -> Ordering
compare
minIndexBy :: Vector v a => (a -> a -> Ordering) -> v a -> Int
{-# INLINE minIndexBy #-}
minIndexBy :: forall (v :: * -> *) a.
Vector v a =>
(a -> a -> Ordering) -> v a -> Int
minIndexBy a -> a -> Ordering
cmpr = forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a (v :: * -> *). (a -> a -> a) -> Bundle v a -> a
Bundle.foldl1' (Int, a) -> (Int, a) -> (Int, a)
imin forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
where
imin :: (Int, a) -> (Int, a) -> (Int, a)
imin (Int
i,a
x) (Int
j,a
y) = Int
i seq :: forall a b. a -> b -> b
`seq` Int
j seq :: forall a b. a -> b -> b
`seq`
case a -> a -> Ordering
cmpr a
x a
y of
Ordering
GT -> (Int
j,a
y)
Ordering
_ -> (Int
i,a
x)
foldM :: (Monad m, Vector v b) => (a -> b -> m a) -> a -> v b -> m a
{-# INLINE foldM #-}
foldM :: forall (m :: * -> *) (v :: * -> *) b a.
(Monad m, Vector v b) =>
(a -> b -> m a) -> a -> v b -> m a
foldM a -> b -> m a
m a
z = forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle v b -> m a
Bundle.foldM a -> b -> m a
m a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
ifoldM :: (Monad m, Vector v b) => (a -> Int -> b -> m a) -> a -> v b -> m a
{-# INLINE ifoldM #-}
ifoldM :: forall (m :: * -> *) (v :: * -> *) b a.
(Monad m, Vector v b) =>
(a -> Int -> b -> m a) -> a -> v b -> m a
ifoldM a -> Int -> b -> m a
m a
z = forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle v b -> m a
Bundle.foldM (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Int -> b -> m a
m) a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
fold1M :: (Monad m, Vector v a) => (a -> a -> m a) -> v a -> m a
{-# INLINE fold1M #-}
fold1M :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
(a -> a -> m a) -> v a -> m a
fold1M a -> a -> m a
m = forall (m :: * -> *) a (v :: * -> *).
Monad m =>
(a -> a -> m a) -> Bundle v a -> m a
Bundle.fold1M a -> a -> m a
m forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
foldM' :: (Monad m, Vector v b) => (a -> b -> m a) -> a -> v b -> m a
{-# INLINE foldM' #-}
foldM' :: forall (m :: * -> *) (v :: * -> *) b a.
(Monad m, Vector v b) =>
(a -> b -> m a) -> a -> v b -> m a
foldM' a -> b -> m a
m a
z = forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle v b -> m a
Bundle.foldM' a -> b -> m a
m a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
ifoldM' :: (Monad m, Vector v b) => (a -> Int -> b -> m a) -> a -> v b -> m a
{-# INLINE ifoldM' #-}
ifoldM' :: forall (m :: * -> *) (v :: * -> *) b a.
(Monad m, Vector v b) =>
(a -> Int -> b -> m a) -> a -> v b -> m a
ifoldM' a -> Int -> b -> m a
m a
z = forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle v b -> m a
Bundle.foldM' (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Int -> b -> m a
m) a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
fold1M' :: (Monad m, Vector v a) => (a -> a -> m a) -> v a -> m a
{-# INLINE fold1M' #-}
fold1M' :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
(a -> a -> m a) -> v a -> m a
fold1M' a -> a -> m a
m = forall (m :: * -> *) a (v :: * -> *).
Monad m =>
(a -> a -> m a) -> Bundle v a -> m a
Bundle.fold1M' a -> a -> m a
m forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
discard :: Monad m => m a -> m ()
{-# INLINE discard #-}
discard :: forall (m :: * -> *) a. Monad m => m a -> m ()
discard m a
m = m a
m forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall (m :: * -> *) a. Monad m => a -> m a
return ()
foldM_ :: (Monad m, Vector v b) => (a -> b -> m a) -> a -> v b -> m ()
{-# INLINE foldM_ #-}
foldM_ :: forall (m :: * -> *) (v :: * -> *) b a.
(Monad m, Vector v b) =>
(a -> b -> m a) -> a -> v b -> m ()
foldM_ a -> b -> m a
m a
z = forall (m :: * -> *) a. Monad m => m a -> m ()
discard forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle v b -> m a
Bundle.foldM a -> b -> m a
m a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
ifoldM_ :: (Monad m, Vector v b) => (a -> Int -> b -> m a) -> a -> v b -> m ()
{-# INLINE ifoldM_ #-}
ifoldM_ :: forall (m :: * -> *) (v :: * -> *) b a.
(Monad m, Vector v b) =>
(a -> Int -> b -> m a) -> a -> v b -> m ()
ifoldM_ a -> Int -> b -> m a
m a
z = forall (m :: * -> *) a. Monad m => m a -> m ()
discard forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle v b -> m a
Bundle.foldM (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Int -> b -> m a
m) a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
fold1M_ :: (Monad m, Vector v a) => (a -> a -> m a) -> v a -> m ()
{-# INLINE fold1M_ #-}
fold1M_ :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
(a -> a -> m a) -> v a -> m ()
fold1M_ a -> a -> m a
m = forall (m :: * -> *) a. Monad m => m a -> m ()
discard forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a (v :: * -> *).
Monad m =>
(a -> a -> m a) -> Bundle v a -> m a
Bundle.fold1M a -> a -> m a
m forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
foldM'_ :: (Monad m, Vector v b) => (a -> b -> m a) -> a -> v b -> m ()
{-# INLINE foldM'_ #-}
foldM'_ :: forall (m :: * -> *) (v :: * -> *) b a.
(Monad m, Vector v b) =>
(a -> b -> m a) -> a -> v b -> m ()
foldM'_ a -> b -> m a
m a
z = forall (m :: * -> *) a. Monad m => m a -> m ()
discard forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle v b -> m a
Bundle.foldM' a -> b -> m a
m a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
ifoldM'_ :: (Monad m, Vector v b) => (a -> Int -> b -> m a) -> a -> v b -> m ()
{-# INLINE ifoldM'_ #-}
ifoldM'_ :: forall (m :: * -> *) (v :: * -> *) b a.
(Monad m, Vector v b) =>
(a -> Int -> b -> m a) -> a -> v b -> m ()
ifoldM'_ a -> Int -> b -> m a
m a
z = forall (m :: * -> *) a. Monad m => m a -> m ()
discard forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle v b -> m a
Bundle.foldM' (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Int -> b -> m a
m) a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Bundle v a -> Bundle v (Int, a)
Bundle.indexed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
fold1M'_ :: (Monad m, Vector v a) => (a -> a -> m a) -> v a -> m ()
{-# INLINE fold1M'_ #-}
fold1M'_ :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
(a -> a -> m a) -> v a -> m ()
fold1M'_ a -> a -> m a
m = forall (m :: * -> *) a. Monad m => m a -> m ()
discard forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a (v :: * -> *).
Monad m =>
(a -> a -> m a) -> Bundle v a -> m a
Bundle.fold1M' a -> a -> m a
m forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
sequence :: (Monad m, Vector v a, Vector v (m a)) => v (m a) -> m (v a)
{-# INLINE sequence #-}
sequence :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a, Vector v (m a)) =>
v (m a) -> m (v a)
sequence = forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
(a -> m b) -> v a -> m (v b)
mapM forall a. a -> a
id
sequence_ :: (Monad m, Vector v (m a)) => v (m a) -> m ()
{-# INLINE sequence_ #-}
sequence_ :: forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v (m a)) =>
v (m a) -> m ()
sequence_ = forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
(a -> m b) -> v a -> m ()
mapM_ forall a. a -> a
id
prescanl :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
{-# INLINE prescanl #-}
prescanl :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> a) -> a -> v b -> v a
prescanl a -> b -> a
f a
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.prescanl a -> b -> a
f a
z) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
prescanl' :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
{-# INLINE prescanl' #-}
prescanl' :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> a) -> a -> v b -> v a
prescanl' a -> b -> a
f a
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.prescanl' a -> b -> a
f a
z) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
postscanl :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
{-# INLINE postscanl #-}
postscanl :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> a) -> a -> v b -> v a
postscanl a -> b -> a
f a
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.postscanl a -> b -> a
f a
z) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
postscanl' :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
{-# INLINE postscanl' #-}
postscanl' :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> a) -> a -> v b -> v a
postscanl' a -> b -> a
f a
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.postscanl' a -> b -> a
f a
z) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
scanl :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
{-# INLINE scanl #-}
scanl :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> a) -> a -> v b -> v a
scanl a -> b -> a
f a
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(a -> b -> a) -> a -> Bundle v b -> Bundle v a
Bundle.scanl a -> b -> a
f a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
scanl' :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
{-# INLINE scanl' #-}
scanl' :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> a) -> a -> v b -> v a
scanl' a -> b -> a
f a
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(a -> b -> a) -> a -> Bundle v b -> Bundle v a
Bundle.scanl' a -> b -> a
f a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
iscanl :: (Vector v a, Vector v b) => (Int -> a -> b -> a) -> a -> v b -> v a
{-# INLINE iscanl #-}
iscanl :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(Int -> a -> b -> a) -> a -> v b -> v a
iscanl Int -> a -> b -> a
f a
z =
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.scanl (\a
a (Int
i, b
b) -> Int -> a -> b -> a
f Int
i a
a b
b) a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => Stream m a -> Stream m (Int, a)
S.indexed) (forall a. Num a => a -> a -> a
+Size
1)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
iscanl' :: (Vector v a, Vector v b) => (Int -> a -> b -> a) -> a -> v b -> v a
{-# INLINE iscanl' #-}
iscanl' :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(Int -> a -> b -> a) -> a -> v b -> v a
iscanl' Int -> a -> b -> a
f a
z =
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.scanl' (\a
a (Int
i, b
b) -> Int -> a -> b -> a
f Int
i a
a b
b) a
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => Stream m a -> Stream m (Int, a)
S.indexed) (forall a. Num a => a -> a -> a
+Size
1)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
scanl1 :: Vector v a => (a -> a -> a) -> v a -> v a
{-# INLINE scanl1 #-}
scanl1 :: forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> v a
scanl1 a -> a -> a
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a.
Monad m =>
(a -> a -> a) -> Stream m a -> Stream m a
S.scanl1 a -> a -> a
f) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
scanl1' :: Vector v a => (a -> a -> a) -> v a -> v a
{-# INLINE scanl1' #-}
scanl1' :: forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> v a
scanl1' a -> a -> a
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a.
Monad m =>
(a -> a -> a) -> Stream m a -> Stream m a
S.scanl1' a -> a -> a
f) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
prescanr :: (Vector v a, Vector v b) => (a -> b -> b) -> b -> v a -> v b
{-# INLINE prescanr #-}
prescanr :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> b) -> b -> v a -> v b
prescanr a -> b -> b
f b
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.prescanl (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> b -> b
f) b
z) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
prescanr' :: (Vector v a, Vector v b) => (a -> b -> b) -> b -> v a -> v b
{-# INLINE prescanr' #-}
prescanr' :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> b) -> b -> v a -> v b
prescanr' a -> b -> b
f b
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.prescanl' (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> b -> b
f) b
z) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
postscanr :: (Vector v a, Vector v b) => (a -> b -> b) -> b -> v a -> v b
{-# INLINE postscanr #-}
postscanr :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> b) -> b -> v a -> v b
postscanr a -> b -> b
f b
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.postscanl (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> b -> b
f) b
z) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
postscanr' :: (Vector v a, Vector v b) => (a -> b -> b) -> b -> v a -> v b
{-# INLINE postscanr' #-}
postscanr' :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> b) -> b -> v a -> v b
postscanr' a -> b -> b
f b
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.postscanl' (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> b -> b
f) b
z) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
scanr :: (Vector v a, Vector v b) => (a -> b -> b) -> b -> v a -> v b
{-# INLINE scanr #-}
scanr :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> b) -> b -> v a -> v b
scanr a -> b -> b
f b
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(a -> b -> a) -> a -> Bundle v b -> Bundle v a
Bundle.scanl (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> b -> b
f) b
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
scanr' :: (Vector v a, Vector v b) => (a -> b -> b) -> b -> v a -> v b
{-# INLINE scanr' #-}
scanr' :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> b) -> b -> v a -> v b
scanr' a -> b -> b
f b
z = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(a -> b -> a) -> a -> Bundle v b -> Bundle v a
Bundle.scanl' (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> b -> b
f) b
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
iscanr :: (Vector v a, Vector v b) => (Int -> a -> b -> b) -> b -> v a -> v b
{-# INLINE iscanr #-}
iscanr :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(Int -> a -> b -> b) -> b -> v a -> v b
iscanr Int -> a -> b -> b
f b
z v a
v =
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.scanl (forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> b
f) b
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a.
Monad m =>
Int -> Stream m a -> Stream m (Int, a)
S.indexedR Int
n) (forall a. Num a => a -> a -> a
+Size
1)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
forall a b. (a -> b) -> a -> b
$ v a
v
where n :: Int
n = forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v
iscanr' :: (Vector v a, Vector v b) => (Int -> a -> b -> b) -> b -> v a -> v b
{-# INLINE iscanr' #-}
iscanr' :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(Int -> a -> b -> b) -> b -> v a -> v b
iscanr' Int -> a -> b -> b
f b
z v a
v =
forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a b.
Monad m =>
(a -> b -> a) -> a -> Stream m b -> Stream m a
S.scanl' (forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> b
f) b
z forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a.
Monad m =>
Int -> Stream m a -> Stream m (Int, a)
S.indexedR Int
n) (forall a. Num a => a -> a -> a
+Size
1)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
forall a b. (a -> b) -> a -> b
$ v a
v
where n :: Int
n = forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v
scanr1 :: Vector v a => (a -> a -> a) -> v a -> v a
{-# INLINE scanr1 #-}
scanr1 :: forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> v a
scanr1 a -> a -> a
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a.
Monad m =>
(a -> a -> a) -> Stream m a -> Stream m a
S.scanl1 (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> a -> a
f)) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
scanr1' :: Vector v a => (a -> a -> a) -> v a -> v a
{-# INLINE scanr1' #-}
scanr1' :: forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> v a
scanr1' a -> a -> a
f = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b (v :: * -> *).
(forall (m :: * -> *). Monad m => Stream m a -> Stream m b)
-> (Size -> Size) -> Bundle v a -> Bundle v b
inplace (forall (m :: * -> *) a.
Monad m =>
(a -> a -> a) -> Stream m a -> Stream m a
S.scanl1' (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> a -> a
f)) forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR
toList :: Vector v a => v a -> [a]
{-# INLINE toList #-}
toList :: forall (v :: * -> *) a. Vector v a => v a -> [a]
toList = forall (v :: * -> *) a. Bundle v a -> [a]
Bundle.toList forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
fromList :: Vector v a => [a] -> v a
{-# INLINE fromList #-}
fromList :: forall (v :: * -> *) a. Vector v a => [a] -> v a
fromList = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a (v :: * -> *). [a] -> Bundle v a
Bundle.fromList
fromListN :: Vector v a => Int -> [a] -> v a
{-# INLINE fromListN #-}
fromListN :: forall (v :: * -> *) a. Vector v a => Int -> [a] -> v a
fromListN Int
n = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a (v :: * -> *). Int -> [a] -> Bundle v a
Bundle.fromListN Int
n
convert :: (Vector v a, Vector w a) => v a -> w a
{-# INLINE convert #-}
convert :: forall (v :: * -> *) a (w :: * -> *).
(Vector v a, Vector w a) =>
v a -> w a
convert = forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (u :: * -> *) a (v :: * -> *). Bundle u a -> Bundle v a
Bundle.reVector forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream
unsafeFreeze
:: (PrimMonad m, Vector v a) => Mutable v (PrimState m) a -> m (v a)
{-# INLINE unsafeFreeze #-}
unsafeFreeze :: forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze = forall (m :: * -> *) a. PrimMonad m => ST (PrimState m) a -> m a
stToPrim forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a s. Vector v a => Mutable v s a -> ST s (v a)
basicUnsafeFreeze
freeze :: (PrimMonad m, Vector v a) => Mutable v (PrimState m) a -> m (v a)
{-# INLINE freeze #-}
freeze :: forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
freeze Mutable v (PrimState m) a
mv = forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall (m :: * -> *) (v :: * -> * -> *) a.
(PrimMonad m, MVector v a) =>
v (PrimState m) a -> m (v (PrimState m) a)
M.clone Mutable v (PrimState m) a
mv
unsafeThaw :: (PrimMonad m, Vector v a) => v a -> m (Mutable v (PrimState m) a)
{-# INLINE_FUSED unsafeThaw #-}
unsafeThaw :: forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
v a -> m (Mutable v (PrimState m) a)
unsafeThaw = forall (m :: * -> *) a. PrimMonad m => ST (PrimState m) a -> m a
stToPrim forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a s. Vector v a => v a -> ST s (Mutable v s a)
basicUnsafeThaw
thaw :: (PrimMonad m, Vector v a) => v a -> m (Mutable v (PrimState m) a)
{-# INLINE_FUSED thaw #-}
thaw :: forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
v a -> m (Mutable v (PrimState m) a)
thaw v a
v = do
Mutable v (PrimState m) a
mv <- forall (m :: * -> *) (v :: * -> * -> *) a.
(PrimMonad m, MVector v a) =>
Int -> m (v (PrimState m) a)
M.unsafeNew (forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v)
forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> v a -> m ()
unsafeCopy Mutable v (PrimState m) a
mv v a
v
forall (m :: * -> *) a. Monad m => a -> m a
return Mutable v (PrimState m) a
mv
{-# RULES
"unsafeThaw/new [Vector]" forall p.
unsafeThaw (new p) = New.runPrim p
"thaw/new [Vector]" forall p.
thaw (new p) = New.runPrim p #-}
unsafeCopy :: (PrimMonad m, Vector v a) => Mutable v (PrimState m) a -> v a -> m ()
{-# INLINE unsafeCopy #-}
unsafeCopy :: forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> v a -> m ()
unsafeCopy Mutable v (PrimState m) a
dst v a
src = forall a. HasCallStack => Checks -> String -> Bool -> a -> a
check Checks
Unsafe String
"length mismatch" (forall (v :: * -> * -> *) a s. MVector v a => v s a -> Int
M.length Mutable v (PrimState m) a
dst forall a. Eq a => a -> a -> Bool
== forall (v :: * -> *) a. Vector v a => v a -> Int
basicLength v a
src)
forall a b. (a -> b) -> a -> b
$ (Mutable v (PrimState m) a
dst seq :: forall a b. a -> b -> b
`seq` v a
src seq :: forall a b. a -> b -> b
`seq` forall (m :: * -> *) a. PrimMonad m => ST (PrimState m) a -> m a
stToPrim (forall (v :: * -> *) a s.
Vector v a =>
Mutable v s a -> v a -> ST s ()
basicUnsafeCopy Mutable v (PrimState m) a
dst v a
src))
copy :: (HasCallStack, PrimMonad m, Vector v a) => Mutable v (PrimState m) a -> v a -> m ()
{-# INLINE copy #-}
copy :: forall (m :: * -> *) (v :: * -> *) a.
(HasCallStack, PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> v a -> m ()
copy Mutable v (PrimState m) a
dst v a
src = forall a. HasCallStack => Checks -> String -> Bool -> a -> a
check Checks
Bounds String
"length mismatch" (forall (v :: * -> * -> *) a s. MVector v a => v s a -> Int
M.length Mutable v (PrimState m) a
dst forall a. Eq a => a -> a -> Bool
== forall (v :: * -> *) a. Vector v a => v a -> Int
basicLength v a
src)
forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> v a -> m ()
unsafeCopy Mutable v (PrimState m) a
dst v a
src
stream :: Vector v a => v a -> Bundle v a
{-# INLINE_FUSED stream #-}
stream :: forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
v = forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
Bundle.fromVector v a
v
unstream :: Vector v a => Bundle v a -> v a
{-# INLINE unstream #-}
unstream :: forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream Bundle v a
s = forall (v :: * -> *) a. Vector v a => New v a -> v a
new (forall (v :: * -> *) a. Vector v a => Bundle v a -> New v a
New.unstream Bundle v a
s)
{-# RULES
"stream/unstream [Vector]" forall s.
stream (new (New.unstream s)) = s
"New.unstream/stream [Vector]" forall v.
New.unstream (stream v) = clone v
"clone/new [Vector]" forall p.
clone (new p) = p
"inplace [Vector]"
forall (f :: forall m. Monad m => Stream m a -> Stream m a) g m.
New.unstream (inplace f g (stream (new m))) = New.transform f g m
"uninplace [Vector]"
forall (f :: forall m. Monad m => Stream m a -> Stream m a) g m.
stream (new (New.transform f g m)) = inplace f g (stream (new m)) #-}
streamR :: Vector v a => v a -> Bundle u a
{-# INLINE_FUSED streamR #-}
streamR :: forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
v a -> Bundle u a
streamR v a
v = v a
v seq :: forall a b. a -> b -> b
`seq` Int
n seq :: forall a b. a -> b -> b
`seq` (forall s a (v :: * -> *). (s -> Maybe (a, s)) -> s -> Bundle v a
Bundle.unfoldr Int -> Maybe (a, Int)
get Int
n forall (v :: * -> *) a. Bundle v a -> Size -> Bundle v a
`Bundle.sized` Int -> Size
Exact Int
n)
where
n :: Int
n = forall (v :: * -> *) a. Vector v a => v a -> Int
length v a
v
{-# INLINE get #-}
get :: Int -> Maybe (a, Int)
get Int
0 = forall a. Maybe a
Nothing
get Int
i = let i' :: Int
i' = Int
iforall a. Num a => a -> a -> a
-Int
1
in
case forall (v :: * -> *) a. Vector v a => v a -> Int -> Box a
basicUnsafeIndexM v a
v Int
i' of Box a
x -> forall a. a -> Maybe a
Just (a
x, Int
i')
unstreamR :: Vector v a => Bundle v a -> v a
{-# INLINE unstreamR #-}
unstreamR :: forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstreamR Bundle v a
s = forall (v :: * -> *) a. Vector v a => New v a -> v a
new (forall (v :: * -> *) a. Vector v a => Bundle v a -> New v a
New.unstreamR Bundle v a
s)
{-# RULES
"streamR/unstreamR [Vector]" forall s.
streamR (new (New.unstreamR s)) = s
"New.unstreamR/streamR/new [Vector]" forall p.
New.unstreamR (streamR (new p)) = p
"New.unstream/streamR/new [Vector]" forall p.
New.unstream (streamR (new p)) = New.modify M.reverse p
"New.unstreamR/stream/new [Vector]" forall p.
New.unstreamR (stream (new p)) = New.modify M.reverse p
"inplace right [Vector]"
forall (f :: forall m. Monad m => Stream m a -> Stream m a) g m.
New.unstreamR (inplace f g (streamR (new m))) = New.transformR f g m
"uninplace right [Vector]"
forall (f :: forall m. Monad m => Stream m a -> Stream m a) g m.
streamR (new (New.transformR f g m)) = inplace f g (streamR (new m)) #-}
unstreamM :: (Monad m, Vector v a) => MBundle m u a -> m (v a)
{-# INLINE_FUSED unstreamM #-}
unstreamM :: forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM MBundle m u a
s = do
[a]
xs <- forall (m :: * -> *) (v :: * -> *) a.
Monad m =>
Bundle m v a -> m [a]
MBundle.toList MBundle m u a
s
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall (v :: * -> *) a. Vector v a => Bundle v a -> v a
unstream forall a b. (a -> b) -> a -> b
$ forall a (v :: * -> *). Size -> [a] -> Bundle v a
Bundle.unsafeFromList (forall (m :: * -> *) (v :: * -> *) a. Bundle m v a -> Size
MBundle.size MBundle m u a
s) [a]
xs
unstreamPrimM :: (PrimMonad m, Vector v a) => MBundle m u a -> m (v a)
{-# INLINE_FUSED unstreamPrimM #-}
unstreamPrimM :: forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(PrimMonad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamPrimM MBundle m u a
s = forall (m :: * -> *) (v :: * -> * -> *) a (u :: * -> *).
(PrimMonad m, MVector v a) =>
MBundle m u a -> m (v (PrimState m) a)
M.munstream MBundle m u a
s forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze
unstreamPrimM_IO :: Vector v a => MBundle IO u a -> IO (v a)
{-# INLINE unstreamPrimM_IO #-}
unstreamPrimM_IO :: forall (v :: * -> *) a (u :: * -> *).
Vector v a =>
MBundle IO u a -> IO (v a)
unstreamPrimM_IO = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(PrimMonad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamPrimM
unstreamPrimM_ST :: Vector v a => MBundle (ST s) u a -> ST s (v a)
{-# INLINE unstreamPrimM_ST #-}
unstreamPrimM_ST :: forall (v :: * -> *) a s (u :: * -> *).
Vector v a =>
MBundle (ST s) u a -> ST s (v a)
unstreamPrimM_ST = forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(PrimMonad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamPrimM
{-# RULES
"unstreamM[IO]" unstreamM = unstreamPrimM_IO
"unstreamM[ST]" unstreamM = unstreamPrimM_ST #-}
new :: Vector v a => New v a -> v a
{-# INLINE_FUSED new #-}
new :: forall (v :: * -> *) a. Vector v a => New v a -> v a
new New v a
m = New v a
m seq :: forall a b. a -> b -> b
`seq` forall a. (forall s. ST s a) -> a
runST (forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> m (v a)
unsafeFreeze forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall (v :: * -> *) a s. New v a -> ST s (Mutable v s a)
New.run New v a
m)
clone :: Vector v a => v a -> New v a
{-# INLINE_FUSED clone #-}
clone :: forall (v :: * -> *) a. Vector v a => v a -> New v a
clone v a
v = v a
v seq :: forall a b. a -> b -> b
`seq` forall (v :: * -> *) a. (forall s. ST s (Mutable v s a)) -> New v a
New.create (
do
Mutable v s a
mv <- forall (m :: * -> *) (v :: * -> * -> *) a.
(HasCallStack, PrimMonad m, MVector v a) =>
Int -> m (v (PrimState m) a)
M.new (forall (v :: * -> *) a. Vector v a => v a -> Int
basicLength v a
v)
forall (m :: * -> *) (v :: * -> *) a.
(PrimMonad m, Vector v a) =>
Mutable v (PrimState m) a -> v a -> m ()
unsafeCopy Mutable v s a
mv v a
v
forall (m :: * -> *) a. Monad m => a -> m a
return Mutable v s a
mv)
eq :: (Vector v a, Eq a) => v a -> v a -> Bool
{-# INLINE eq #-}
v a
xs eq :: forall (v :: * -> *) a. (Vector v a, Eq a) => v a -> v a -> Bool
`eq` v a
ys = forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
xs forall a. Eq a => a -> a -> Bool
== forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
ys
eqBy :: (Vector v a, Vector v b) => (a -> b -> Bool) -> v a -> v b -> Bool
{-# INLINE eqBy #-}
eqBy :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> Bool) -> v a -> v b -> Bool
eqBy a -> b -> Bool
e v a
xs v b
ys = forall a b (v :: * -> *).
(a -> b -> Bool) -> Bundle v a -> Bundle v b -> Bool
Bundle.eqBy a -> b -> Bool
e (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
xs) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
ys)
cmp :: (Vector v a, Ord a) => v a -> v a -> Ordering
{-# INLINE cmp #-}
cmp :: forall (v :: * -> *) a.
(Vector v a, Ord a) =>
v a -> v a -> Ordering
cmp v a
xs v a
ys = forall a. Ord a => a -> a -> Ordering
compare (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
xs) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
ys)
cmpBy :: (Vector v a, Vector v b) => (a -> b -> Ordering) -> v a -> v b -> Ordering
cmpBy :: forall (v :: * -> *) a b.
(Vector v a, Vector v b) =>
(a -> b -> Ordering) -> v a -> v b -> Ordering
cmpBy a -> b -> Ordering
c v a
xs v b
ys = forall a b (v :: * -> *).
(a -> b -> Ordering) -> Bundle v a -> Bundle v b -> Ordering
Bundle.cmpBy a -> b -> Ordering
c (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v a
xs) (forall (v :: * -> *) a. Vector v a => v a -> Bundle v a
stream v b
ys)
showsPrec :: (Vector v a, Show a) => Int -> v a -> ShowS
{-# INLINE showsPrec #-}
showsPrec :: forall (v :: * -> *) a. (Vector v a, Show a) => Int -> v a -> ShowS
showsPrec Int
_ = forall a. Show a => a -> ShowS
shows forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> [a]
toList
liftShowsPrec :: (Vector v a) => (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> v a -> ShowS
{-# INLINE liftShowsPrec #-}
liftShowsPrec :: forall (v :: * -> *) a.
Vector v a =>
(Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> v a -> ShowS
liftShowsPrec Int -> a -> ShowS
_ [a] -> ShowS
s Int
_ = [a] -> ShowS
s forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) a. Vector v a => v a -> [a]
toList
readPrec :: (Vector v a, Read a) => Read.ReadPrec (v a)
{-# INLINE readPrec #-}
readPrec :: forall (v :: * -> *) a. (Vector v a, Read a) => ReadPrec (v a)
readPrec = do
[a]
xs <- forall a. Read a => ReadPrec a
Read.readPrec
forall (m :: * -> *) a. Monad m => a -> m a
return (forall (v :: * -> *) a. Vector v a => [a] -> v a
fromList [a]
xs)
liftReadsPrec :: (Vector v a) => (Int -> Read.ReadS a) -> ReadS [a] -> Int -> Read.ReadS (v a)
liftReadsPrec :: forall (v :: * -> *) a.
Vector v a =>
(Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (v a)
liftReadsPrec Int -> ReadS a
_ ReadS [a]
r Int
_ String
s = [ (forall (v :: * -> *) a. Vector v a => [a] -> v a
fromList [a]
v, String
s') | ([a]
v, String
s') <- ReadS [a]
r String
s ]
gfoldl :: (Vector v a, Data a)
=> (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> v a
-> c (v a)
{-# INLINE gfoldl #-}
gfoldl :: forall (v :: * -> *) a (c :: * -> *).
(Vector v a, Data a) =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> v a -> c (v a)
gfoldl forall d b. Data d => c (d -> b) -> d -> c b
f forall g. g -> c g
z v a
v = forall g. g -> c g
z forall (v :: * -> *) a. Vector v a => [a] -> v a
fromList forall d b. Data d => c (d -> b) -> d -> c b
`f` forall (v :: * -> *) a. Vector v a => v a -> [a]
toList v a
v
mkVecConstr :: String -> Constr
{-# INLINE mkVecConstr #-}
mkVecConstr :: String -> Constr
mkVecConstr String
name = DataType -> String -> [String] -> Fixity -> Constr
mkConstr (String -> DataType
mkVecType String
name) String
"fromList" [] Fixity
Prefix
mkVecType :: String -> DataType
{-# INLINE mkVecType #-}
mkVecType :: String -> DataType
mkVecType String
name = String -> [Constr] -> DataType
mkDataType String
name [String -> Constr
mkVecConstr String
name]
mkType :: String -> DataType
{-# INLINE mkType #-}
{-# DEPRECATED mkType "Use Data.Data.mkNoRepType" #-}
mkType :: String -> DataType
mkType = String -> DataType
mkNoRepType
gunfold :: (Vector v a, Data a, HasCallStack)
=> (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r)
-> Constr -> c (v a)
gunfold :: forall (v :: * -> *) a (c :: * -> *).
(Vector v a, Data a, HasCallStack) =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (v a)
gunfold forall b r. Data b => c (b -> r) -> c r
k forall r. r -> c r
z Constr
c = case Constr -> Int
constrIndex Constr
c of
Int
1 -> forall b r. Data b => c (b -> r) -> c r
k (forall r. r -> c r
z forall (v :: * -> *) a. Vector v a => [a] -> v a
fromList)
Int
_ -> forall a. HasCallStack => String -> a
error String
"gunfold"
dataCast :: (Vector v a, Data a, Typeable v, Typeable t)
=> (forall d. Data d => c (t d)) -> Maybe (c (v a))
{-# INLINE dataCast #-}
dataCast :: forall (v :: * -> *) a (t :: * -> *) (c :: * -> *).
(Vector v a, Data a, Typeable v, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (v a))
dataCast forall d. Data d => c (t d)
f = forall {k1} {k2} (c :: k1 -> *) (t :: k2 -> k1) (t' :: k2 -> k1)
(a :: k2).
(Typeable t, Typeable t') =>
c (t a) -> Maybe (c (t' a))
gcast1 forall d. Data d => c (t d)
f