-- |
-- Module      :   Grisette.Qualified.ParallelUnionDo
-- Copyright   :   (c) Sirui Lu 2023
-- License     :   BSD-3-Clause (see the LICENSE file)
--
-- Maintainer  :   siruilu@cs.washington.edu
-- Stability   :   Experimental
-- Portability :   GHC only
module Grisette.Experimental.Qualified.ParallelUnionDo ((>>=), (>>)) where

import Control.Parallel.Strategies (NFData)
import Grisette.Experimental.MonadParallelUnion
  ( MonadParallelUnion (parBindUnion),
  )
import Grisette.Internal.Core.Data.Class.Mergeable (Mergeable)
import Prelude (const, ($))

(>>=) :: (MonadParallelUnion m, Mergeable b, NFData b) => m a -> (a -> m b) -> m b
>>= :: forall (m :: * -> *) b a.
(MonadParallelUnion m, Mergeable b, NFData b) =>
m a -> (a -> m b) -> m b
(>>=) = m a -> (a -> m b) -> m b
forall b a. (Mergeable b, NFData b) => m a -> (a -> m b) -> m b
forall (m :: * -> *) b a.
(MonadParallelUnion m, Mergeable b, NFData b) =>
m a -> (a -> m b) -> m b
parBindUnion

(>>) :: (MonadParallelUnion m, Mergeable b, NFData b) => m a -> m b -> m b
>> :: forall (m :: * -> *) b a.
(MonadParallelUnion m, Mergeable b, NFData b) =>
m a -> m b -> m b
(>>) m a
a m b
b = m a -> (a -> m b) -> m b
forall b a. (Mergeable b, NFData b) => m a -> (a -> m b) -> m b
forall (m :: * -> *) b a.
(MonadParallelUnion m, Mergeable b, NFData b) =>
m a -> (a -> m b) -> m b
parBindUnion m a
a ((a -> m b) -> m b) -> (a -> m b) -> m b
forall a b. (a -> b) -> a -> b
$ m b -> a -> m b
forall a b. a -> b -> a
const m b
b