{-# LANGUAGE TypeFamilies, NoMonomorphismRestriction, NoImplicitPrelude, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, UndecidableInstances #-}

module Control.RMonad.Trans where

import Prelude hiding (return, fail, (>>=), (>>), (=<<), sequence, sequence_, mapM, mapM_)

import Control.RMonad

import Control.Monad.Trans.List


class RMonadTrans t where
  lift :: (RMonad m, Suitable m a, Suitable (t m) a) => m a -> t m a

class RMonad m => RMonadIO m where
  liftIO :: Suitable m a => IO a -> m a

instance RMonadIO IO where
  liftIO = id