{-# LINE 1 "src/Gpu/Vulkan/Misc/Middle/Internal.hsc" #-}
{-# LANGUAGE BlockArguments, LambdaCase, TupleSections #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.Misc.Middle.Internal (

	-- * Control

	mapContM,

	) where



mapContM :: Monad m => (a -> (b -> m c) -> m c) -> [a] -> ([b] -> m c) -> m c
-- mapContM f = runContT . mapM (ContT . f)
mapContM :: forall (m :: * -> *) a b c.
Monad m =>
(a -> (b -> m c) -> m c) -> [a] -> ([b] -> m c) -> m c
mapContM a -> (b -> m c) -> m c
_ [] [b] -> m c
g = [b] -> m c
g []
mapContM a -> (b -> m c) -> m c
f (a
x : [a]
xs) [b] -> m c
g = a -> (b -> m c) -> m c
f a
x \b
y -> (a -> (b -> m c) -> m c) -> [a] -> ([b] -> m c) -> m c
forall (m :: * -> *) a b c.
Monad m =>
(a -> (b -> m c) -> m c) -> [a] -> ([b] -> m c) -> m c
mapContM a -> (b -> m c) -> m c
f [a]
xs \[b]
ys -> [b] -> m c
g ([b] -> m c) -> [b] -> m c
forall a b. (a -> b) -> a -> b
$ b
y b -> [b] -> [b]
forall a. a -> [a] -> [a]
: [b]
ys