module Control.Monad.STLike.STM (STMS, stm, stmsToIOS, module Control.Monad.STLike.IO ) where import Control.Concurrent.STM import Control.Monad.STLike.IO import Control.Monad.STLike.Unsafe -- | Monad for STM computations with ST-like variables. type STMS s t = STLike STM s t instance STLikeImpl STM -- | Lift STM computations into STMS. stm :: STM t -> STMS s t stm x = STLike x -- | Run an STMS computation with /atomically/. stmsToIOS :: STMS s t -> IOS s t stmsToIOS x = let STLike v = x in io (atomically v)