module Effects.Evaluate
(
MonadEvaluate (..),
)
where
import Control.Exception qualified as Ex
import Control.Monad.Trans.Class (MonadTrans (lift))
import Control.Monad.Trans.Reader (ReaderT)
import GHC.Stack (HasCallStack)
class (Monad m) => MonadEvaluate m where
evaluate :: (HasCallStack) => a -> m a
instance MonadEvaluate IO where
evaluate :: forall a. HasCallStack => a -> IO a
evaluate = a -> IO a
forall a. a -> IO a
Ex.evaluate
{-# INLINEABLE evaluate #-}
instance (MonadEvaluate m) => MonadEvaluate (ReaderT e m) where
evaluate :: forall a. HasCallStack => a -> ReaderT e m a
evaluate = m a -> ReaderT e m a
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 a -> ReaderT e m a) -> (a -> m a) -> a -> ReaderT e m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> m a
forall a. HasCallStack => a -> m a
forall (m :: * -> *) a. (MonadEvaluate m, HasCallStack) => a -> m a
evaluate
{-# INLINEABLE evaluate #-}