{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE Trustworthy #-}
module Grisette.Lib.Control.Monad.Trans
(
mrgLift,
)
where
import Control.Monad.Trans
import Grisette.Core.Control.Monad.Union
import Grisette.Core.Data.Class.Mergeable
import Grisette.Core.Data.Class.SimpleMergeable
mrgLift ::
forall t m a.
(MonadUnion (t m), MonadTrans t, Monad m, Mergeable a) =>
m a ->
t m a
mrgLift :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadUnion (t m), MonadTrans t, Monad m, Mergeable a) =>
m a -> t m a
mrgLift m a
v = forall (u :: * -> *) a. (UnionLike u, Mergeable a) => u a -> u a
merge forall a b. (a -> b) -> a -> b
$ forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift m a
v
{-# INLINE mrgLift #-}