{-# LANGUAGE Trustworthy #-} {-# LANGUAGE MagicHash, UnboxedTuples #-} module Control.Monad.RT (RT, module Control.Monad.RT) where import Control.Monad.RT.Unsafe import GHC.Base (runRW#) import GHC.IO (IO(IO)) import Data.Coerce (coerce) {-# INLINE runRT #-} runRT :: RT a -> a runRT :: forall a. RT a -> a runRT (RT State# RealWorld -> (# State# RealWorld, a #) mx) = case (State# RealWorld -> (# State# RealWorld, a #)) -> (# State# RealWorld, a #) forall o. (State# RealWorld -> o) -> o runRW# State# RealWorld -> (# State# RealWorld, a #) mx of (# State# RealWorld _, a x #) -> a x {-# INLINE rtToIO #-} rtToIO :: RT a -> IO a rtToIO :: forall a. RT a -> IO a rtToIO = RT a -> IO a forall a b. Coercible a b => a -> b coerce