module Control.Monad.Class.MonadTest (MonadTest (..)) where

import Control.Monad.Reader

-- | A helper monad for /IOSimPOR/.
class Monad m => MonadTest m where
  -- | Mark a thread for schedule exploration.  All threads that are forked by
  -- it are also included in the exploration.
  --
  exploreRaces :: m ()
  exploreRaces = () -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

instance MonadTest IO

instance MonadTest m => MonadTest (ReaderT e m) where
  exploreRaces :: ReaderT e m ()
exploreRaces = m () -> ReaderT e m ()
forall (m :: * -> *) a. Monad m => m a -> ReaderT e m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift m ()
forall (m :: * -> *). MonadTest m => m ()
exploreRaces