| 42 | This method executes its `m a` and `m b` arguments in parallel. Once they're both finished, ''bindM2'' runs their results through its first argument and returns the final result. Note that 'bindM2' can be implemented using `forkExec`, but not vice versa. |

| 43 | |

| 44 | Based on this foundation, the library defines and exports other useful functions. These replicate the functionality of the [http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.2.0.0/Control-Monad.html Control.Monad] module, but they execute their monadic arguments in parallel. |

| 45 | |

| 46 | {{{ |

| 47 | bindM3 :: MonadParallel m => (a -> b -> c -> m d) -> m a -> m b -> m c -> m d |

| 48 | liftM2 :: MonadParallel m => (a -> b -> c) -> m a -> m b -> m c |

| 49 | liftM3 :: (MonadParallel m) => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r |

| 50 | ap :: MonadParallel m => m (a -> b) -> m a -> m b |

| 51 | sequence :: MonadParallel m => [m a] -> m [a] |

| 52 | sequence_ :: MonadParallel m => [m a] -> m () |

| 53 | mapM :: MonadParallel m => (a -> m b) -> [a] -> m [b] |

| 54 | replicateM :: MonadParallel m => Int -> m a -> m [a] |

| 55 | replicateM_ :: MonadParallel m => Int -> m a -> m () |

| 56 | }}} |