packages feed

ghc-stack-annotations-0.2.0.0: src/GHC/Stack/Annotation/UnliftIO.hs

module GHC.Stack.Annotation.UnliftIO
  (
  -- * Push stack frame annotations in 'MonadUnliftIO' code.
  --
  annotateStackIO,
  annotateStackStringIO,
  annotateStackShowIO,
  annotateCallStackIO,
  ) where

import qualified GHC.Stack.Annotation as Annotation
import Data.Typeable (Typeable)
import Control.Monad.IO.Unlift (MonadUnliftIO(..))
import GHC.Stack.Types (HasCallStack)

annotateStackIO :: (Typeable a, Annotation.StackAnnotation a, MonadUnliftIO m) => a -> m b -> m b
annotateStackIO anno action =
  withRunInIO $ \runInIO -> Annotation.annotateStackIO anno (runInIO action)

annotateStackStringIO :: MonadUnliftIO m => String -> m b -> m b
annotateStackStringIO msg action =
  withRunInIO $ \runInIO -> Annotation.annotateStackStringIO msg (runInIO action)

annotateStackShowIO :: (Show a, MonadUnliftIO m) => a -> m b -> m b
annotateStackShowIO value action =
  withRunInIO $ \runInIO -> Annotation.annotateStackShowIO value (runInIO action)

annotateCallStackIO :: (HasCallStack, MonadUnliftIO m) => m b -> m b
annotateCallStackIO action =
  withRunInIO $ \runInIO -> Annotation.annotateCallStackIO (runInIO action)