module Data.Vector.Ext (scanlM') where
import Data.Vector.Fusion.Bundle.Monadic (fromVector)
import qualified Data.Vector.Fusion.Bundle.Monadic as Bundle
import Data.Vector.Generic (Vector, unstreamM)
scanlM' :: (Monad m, Vector v a, Vector v b) => (a -> b -> m a) -> a -> v b -> m (v a)
scanlM' :: forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a, Vector v b) =>
(a -> b -> m a) -> a -> v b -> m (v a)
scanlM' a -> b -> m a
op a
seed = MBundle m v a -> m (v a)
forall (m :: * -> *) (v :: * -> *) a (u :: * -> *).
(Monad m, Vector v a) =>
MBundle m u a -> m (v a)
unstreamM (MBundle m v a -> m (v a))
-> (v b -> MBundle m v a) -> v b -> m (v a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> b -> m a) -> a -> Bundle m v b -> MBundle m v a
forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m a) -> a -> Bundle m v b -> Bundle m v a
Bundle.scanlM' a -> b -> m a
op a
seed (Bundle m v b -> MBundle m v a)
-> (v b -> Bundle m v b) -> v b -> MBundle m v a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. v b -> Bundle m v b
forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
v a -> Bundle m v a
fromVector