#if __GLASGOW_HASKELL__>=700
#endif
module Control.RMonad.Trans.Cont where
import Control.RMonad.Prelude
import Control.RMonad.Trans
import Data.Suitable
import Control.Monad.Trans.Cont
data instance Constraints (ContT r m) a = (Suitable m a, Suitable m r) => ContTConstraints
instance (Suitable m a, Suitable m r) => Suitable (ContT r m) a where
constraints = ContTConstraints
instance RMonad m => RMonad (ContT r m) where
return a = ContT $ \c -> c a
m >>= f = ContT $ \c -> runContT m $ \a -> runContT (f a) c
instance RMonadTrans (ContT r) where
lift m = withResConstraints $ \ContTConstraints -> ContT $ \c -> m >>= c
instance RMonadIO m => RMonadIO (ContT r m) where
liftIO m = withResConstraints $ \ContTConstraints -> lift $ liftIO m