module Language.Dickinson.Check.Common ( mapSumM
                                       ) where

import           Control.Applicative (Alternative)
import           Data.Foldable       (asum)

mapSumM :: (Traversable t, Alternative f, Applicative m) => (a -> m (f b)) -> t a -> m (f b)
mapSumM :: forall (t :: * -> *) (f :: * -> *) (m :: * -> *) a b.
(Traversable t, Alternative f, Applicative m) =>
(a -> m (f b)) -> t a -> m (f b)
mapSumM = (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum forall b c a. (b -> c) -> (a -> b) -> a -> c
.) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse