module HaskellWorks.Polysemy.Control.Concurrent.STM ( TVar, atomically, STM.orElse, STM.retry, STM.check, STM.throwSTM, STM.catchSTM, ) where import Control.Concurrent.STM (STM, TVar) import qualified Control.Concurrent.STM as STM import HaskellWorks.Polysemy.Prelude import Polysemy atomically :: () => Member (Embed IO) r => STM a -> Sem r a atomically :: forall (r :: EffectRow) a. Member (Embed IO) r => STM a -> Sem r a atomically STM a m = IO a -> Sem r a forall (m :: * -> *) (r :: EffectRow) a. Member (Embed m) r => m a -> Sem r a embed (IO a -> Sem r a) -> IO a -> Sem r a forall a b. (a -> b) -> a -> b $ STM a -> IO a forall a. STM a -> IO a STM.atomically STM a m