-- | This module corresponds to "Control.Monad.STM" in "stm" package -- {-# LANGUAGE DataKinds #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} -- undecidable instances needed for 'WrappedSTM' instances of 'MonadThrow' and -- 'MonadCatch' type classes. {-# LANGUAGE UndecidableInstances #-} module Control.Monad.Class.MonadSTM ( MonadSTM (STM, atomically, retry, orElse, check) , throwSTM -- * non standard extensions -- -- $non-standard-extensions , MonadLabelledSTM , MonadTraceSTM (..) , TraceValue (..) , MonadInspectSTM (..) ) where import Control.Monad.Class.MonadSTM.Internal -- $non-standard-extensions -- -- The non standard extensions include `MonadLabelledSTM` and `MonadTraceSTM` / -- `MonadInspectSTM`. For `IO` these are all no-op, however they greatly -- enhance [`IOSim`](https://hackage.haskell.org/package/io-sim) capabilities. -- They are not only useful for debugging concurrency issues, but also to write -- testable properties.