module AesonValueParser.Vector where

import AesonValueParser.Prelude hiding (Vector)
import qualified Data.Vector.Fusion.Bundle.Monadic as BundleM
import Data.Vector.Generic

{-# INLINE ifoldrM #-}
ifoldrM :: (Vector v a, Monad m) => (Int -> a -> b -> m b) -> b -> v a -> m b
ifoldrM :: forall (v :: * -> *) a (m :: * -> *) b.
(Vector v a, Monad m) =>
(Int -> a -> b -> m b) -> b -> v a -> m b
ifoldrM Int -> a -> b -> m b
f b
z = forall (m :: * -> *) a b (v :: * -> *).
Monad m =>
(a -> b -> m b) -> b -> Bundle m v a -> m b
BundleM.foldrM (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> a -> b -> m b
f) b
z forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall (m :: * -> *) (v :: * -> *) a.
Monad m =>
Bundle m v a -> Bundle m v (Int, a)
BundleM.indexed forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
v a -> Bundle m v a
BundleM.fromVector