Copyright | (c) Gabriel Volpe 2020 |
---|---|
License | Apache-2.0 |
Maintainer | volpegabriel@gmail.com |
Stability | experimental |
Safe Haskell | Safe |
Language | Haskell2010 |
You can find here functions such as parMap2
, parTraverse
, parBitraverse
, etc.
Synopsis
- class (Monad m, Applicative f) => ParDual f m | m -> f, f -> m where
- parallel :: forall a. m a -> f a
- sequential :: forall a. f a -> m a
- parMap2 :: m a0 -> m a1 -> (a0 -> a1 -> a) -> m a
- parMap3 :: m a0 -> m a1 -> m a2 -> (a0 -> a1 -> a2 -> a) -> m a
- parMap4 :: m a0 -> m a1 -> m a2 -> m a3 -> (a0 -> a1 -> a2 -> a3 -> a) -> m a
- parMap5 :: m a0 -> m a1 -> m a2 -> m a3 -> m a4 -> (a0 -> a1 -> a2 -> a3 -> a4 -> a) -> m a
- parMap6 :: m a0 -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> (a0 -> a1 -> a2 -> a3 -> a4 -> a5 -> a) -> m a
- parTraverse :: Traversable t => (a -> m b) -> t a -> m (t b)
- parTraverse_ :: Traversable t => (a -> m b) -> t a -> m ()
- parSequence :: Traversable t => t (m a) -> m (t a)
- parSequence_ :: Traversable t => t (m a) -> m ()
- parProductR :: m a -> m b -> m b
- parProductL :: m a -> m b -> m a
- parBitraverse :: Bitraversable t => (a -> m c) -> (b -> m d) -> t a b -> m (t c d)
- parBisequence :: Bitraversable t => t (m a) (m b) -> m (t a b)
Documentation
class (Monad m, Applicative f) => ParDual f m | m -> f, f -> m where Source #
The ParDual class abstracts over Monad
s that have a dual
Applicative
instance that acts in a different useful way.
E.g., the duality between Either
and Validation
. As well
as the duality between IO
and Concurrently
.
It can also be seen as an isomorphism defined at the class level.
parallel :: forall a. m a -> f a Source #
A natural transformation from m
to f
sequential :: forall a. f a -> m a Source #
A natural transformation from f
to m
parMap2 :: m a0 -> m a1 -> (a0 -> a1 -> a) -> m a Source #
It is the analogue to using <$>
and <*>
for the dual
Applicative
of the current Monad
, as defined by the
relationship defined by the ParDual
instance.
parMap3 :: m a0 -> m a1 -> m a2 -> (a0 -> a1 -> a2 -> a) -> m a Source #
It is the analogue to using <$>
and <*>
for the dual
Applicative
of the current Monad
, as defined by the
relationship defined by the ParDual
instance.
parMap4 :: m a0 -> m a1 -> m a2 -> m a3 -> (a0 -> a1 -> a2 -> a3 -> a) -> m a Source #
It is the analogue to using <$>
and <*>
for the dual
Applicative
of the current Monad
, as defined by the
relationship defined by the ParDual
instance.
parMap5 :: m a0 -> m a1 -> m a2 -> m a3 -> m a4 -> (a0 -> a1 -> a2 -> a3 -> a4 -> a) -> m a Source #
It is the analogue to using <$>
and <*>
for the dual
Applicative
of the current Monad
, as defined by the
relationship defined by the ParDual
instance.
parMap6 :: m a0 -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> (a0 -> a1 -> a2 -> a3 -> a4 -> a5 -> a) -> m a Source #
It is the analogue to using <$>
and <*>
for the dual
Applicative
of the current Monad
, as defined by the
relationship defined by the ParDual
instance.
parTraverse :: Traversable t => (a -> m b) -> t a -> m (t b) Source #
Same as traverse
, except it uses the dual Applicative
of
the current Monad
, as defined by the ParDual
relationship.
parTraverse_ :: Traversable t => (a -> m b) -> t a -> m () Source #
Same as traverse_
, except it uses the dual Applicative
of
the current Monad
, as defined by the ParDual
relationship.
parSequence :: Traversable t => t (m a) -> m (t a) Source #
Same as sequence
, except it uses the dual Applicative
of
the current Monad
, as defined by the ParDual
relationship.
parSequence_ :: Traversable t => t (m a) -> m () Source #
Same as sequence_
, except it uses the dual Applicative
of
the current Monad
, as defined by the ParDual
relationship.
parProductR :: m a -> m b -> m b Source #
Same as *>
, except it uses the dual Applicative
of
the current Monad
, as defined by the ParDual
relationship.
parProductL :: m a -> m b -> m a Source #
Same as <*
, except it uses the dual Applicative
of
the current Monad
, as defined by the ParDual
relationship.
parBitraverse :: Bitraversable t => (a -> m c) -> (b -> m d) -> t a b -> m (t c d) Source #
Same as bitraverse
, except it uses the dual Applicative
of
the current Monad
, as defined by the ParDual
relationship.
parBisequence :: Bitraversable t => t (m a) (m b) -> m (t a b) Source #
Same as bisequence
, except it uses the dual Applicative
of
the current Monad
, as defined by the ParDual
relationship.
Instances
ParDual Concurrently IO Source # | |
Defined in Control.ParDual.Class parallel :: IO a -> Concurrently a Source # sequential :: Concurrently a -> IO a Source # parMap2 :: IO a0 -> IO a1 -> (a0 -> a1 -> a) -> IO a Source # parMap3 :: IO a0 -> IO a1 -> IO a2 -> (a0 -> a1 -> a2 -> a) -> IO a Source # parMap4 :: IO a0 -> IO a1 -> IO a2 -> IO a3 -> (a0 -> a1 -> a2 -> a3 -> a) -> IO a Source # parMap5 :: IO a0 -> IO a1 -> IO a2 -> IO a3 -> IO a4 -> (a0 -> a1 -> a2 -> a3 -> a4 -> a) -> IO a Source # parMap6 :: IO a0 -> IO a1 -> IO a2 -> IO a3 -> IO a4 -> IO a5 -> (a0 -> a1 -> a2 -> a3 -> a4 -> a5 -> a) -> IO a Source # parTraverse :: Traversable t => (a -> IO b) -> t a -> IO (t b) Source # parTraverse_ :: Traversable t => (a -> IO b) -> t a -> IO () Source # parSequence :: Traversable t => t (IO a) -> IO (t a) Source # parSequence_ :: Traversable t => t (IO a) -> IO () Source # parProductR :: IO a -> IO b -> IO b Source # parProductL :: IO a -> IO b -> IO a Source # parBitraverse :: Bitraversable t => (a -> IO c) -> (b -> IO d) -> t a b -> IO (t c d) Source # parBisequence :: Bitraversable t => t (IO a) (IO b) -> IO (t a b) Source # | |
ParDual ZipList [] Source # | |
Defined in Control.ParDual.Class parallel :: [a] -> ZipList a Source # sequential :: ZipList a -> [a] Source # parMap2 :: [a0] -> [a1] -> (a0 -> a1 -> a) -> [a] Source # parMap3 :: [a0] -> [a1] -> [a2] -> (a0 -> a1 -> a2 -> a) -> [a] Source # parMap4 :: [a0] -> [a1] -> [a2] -> [a3] -> (a0 -> a1 -> a2 -> a3 -> a) -> [a] Source # parMap5 :: [a0] -> [a1] -> [a2] -> [a3] -> [a4] -> (a0 -> a1 -> a2 -> a3 -> a4 -> a) -> [a] Source # parMap6 :: [a0] -> [a1] -> [a2] -> [a3] -> [a4] -> [a5] -> (a0 -> a1 -> a2 -> a3 -> a4 -> a5 -> a) -> [a] Source # parTraverse :: Traversable t => (a -> [b]) -> t a -> [t b] Source # parTraverse_ :: Traversable t => (a -> [b]) -> t a -> [()] Source # parSequence :: Traversable t => t [a] -> [t a] Source # parSequence_ :: Traversable t => t [a] -> [()] Source # parProductR :: [a] -> [b] -> [b] Source # parProductL :: [a] -> [b] -> [a] Source # parBitraverse :: Bitraversable t => (a -> [c]) -> (b -> [d]) -> t a b -> [t c d] Source # parBisequence :: Bitraversable t => t [a] [b] -> [t a b] Source # | |
Semigroup e => ParDual (Validation e) (Either e) Source # | |
Defined in Control.ParDual.Class parallel :: Either e a -> Validation e a Source # sequential :: Validation e a -> Either e a Source # parMap2 :: Either e a0 -> Either e a1 -> (a0 -> a1 -> a) -> Either e a Source # parMap3 :: Either e a0 -> Either e a1 -> Either e a2 -> (a0 -> a1 -> a2 -> a) -> Either e a Source # parMap4 :: Either e a0 -> Either e a1 -> Either e a2 -> Either e a3 -> (a0 -> a1 -> a2 -> a3 -> a) -> Either e a Source # parMap5 :: Either e a0 -> Either e a1 -> Either e a2 -> Either e a3 -> Either e a4 -> (a0 -> a1 -> a2 -> a3 -> a4 -> a) -> Either e a Source # parMap6 :: Either e a0 -> Either e a1 -> Either e a2 -> Either e a3 -> Either e a4 -> Either e a5 -> (a0 -> a1 -> a2 -> a3 -> a4 -> a5 -> a) -> Either e a Source # parTraverse :: Traversable t => (a -> Either e b) -> t a -> Either e (t b) Source # parTraverse_ :: Traversable t => (a -> Either e b) -> t a -> Either e () Source # parSequence :: Traversable t => t (Either e a) -> Either e (t a) Source # parSequence_ :: Traversable t => t (Either e a) -> Either e () Source # parProductR :: Either e a -> Either e b -> Either e b Source # parProductL :: Either e a -> Either e b -> Either e a Source # parBitraverse :: Bitraversable t => (a -> Either e c) -> (b -> Either e d) -> t a b -> Either e (t c d) Source # parBisequence :: Bitraversable t => t (Either e a) (Either e b) -> Either e (t a b) Source # |