module StreamPatch.Util where
import Data.Foldable ( sequenceA_ )
traverseM
:: (Traversable t, Applicative f, Monad m)
=> (v -> m (f v'))
-> t v
-> m (f (t v'))
traverseM :: forall (t :: * -> *) (f :: * -> *) (m :: * -> *) v v'.
(Traversable t, Applicative f, Monad m) =>
(v -> m (f v')) -> t v -> m (f (t v'))
traverseM v -> m (f v')
f t v
xs = t (f v') -> f (t v')
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA (t (f v') -> f (t v')) -> m (t (f v')) -> m (f (t v'))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (v -> m (f v')) -> t v -> m (t (f v'))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse v -> m (f v')
f t v
xs
traverseM_
:: (Traversable t, Applicative f, Monad m)
=> (v -> m (f ()))
-> t v
-> m (f ())
traverseM_ :: forall (t :: * -> *) (f :: * -> *) (m :: * -> *) v.
(Traversable t, Applicative f, Monad m) =>
(v -> m (f ())) -> t v -> m (f ())
traverseM_ v -> m (f ())
f t v
xs = t (f ()) -> f ()
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Applicative f) =>
t (f a) -> f ()
sequenceA_ (t (f ()) -> f ()) -> m (t (f ())) -> m (f ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (v -> m (f ())) -> t v -> m (t (f ()))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse v -> m (f ())
f t v
xs