module HGraph.Debugging ( module HGraph.Debugging , sayString , sayErrString ) where import Say import Control.Exception import Control.Concurrent.MVar hasLocked :: String -> IO a -> IO a hasLocked :: forall a. String -> IO a -> IO a hasLocked String msg IO a action = IO a action IO a -> [Handler a] -> IO a forall a. IO a -> [Handler a] -> IO a `catches` [ (BlockedIndefinitelyOnMVar -> IO a) -> Handler a forall a e. Exception e => (e -> IO a) -> Handler a Handler ((BlockedIndefinitelyOnMVar -> IO a) -> Handler a) -> (BlockedIndefinitelyOnMVar -> IO a) -> Handler a forall a b. (a -> b) -> a -> b $ \exc :: BlockedIndefinitelyOnMVar exc@BlockedIndefinitelyOnMVar BlockedIndefinitelyOnMVar -> String -> IO () forall (m :: * -> *). MonadIO m => String -> m () sayString (String "[MVar]: " String -> String -> String forall a. [a] -> [a] -> [a] ++ String msg) IO () -> IO a -> IO a forall a b. IO a -> IO b -> IO b forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> BlockedIndefinitelyOnMVar -> IO a forall e a. Exception e => e -> IO a throwIO BlockedIndefinitelyOnMVar exc , (BlockedIndefinitelyOnSTM -> IO a) -> Handler a forall a e. Exception e => (e -> IO a) -> Handler a Handler ((BlockedIndefinitelyOnSTM -> IO a) -> Handler a) -> (BlockedIndefinitelyOnSTM -> IO a) -> Handler a forall a b. (a -> b) -> a -> b $ \exc :: BlockedIndefinitelyOnSTM exc@BlockedIndefinitelyOnSTM BlockedIndefinitelyOnSTM -> String -> IO () forall (m :: * -> *). MonadIO m => String -> m () sayString (String "[STM]: " String -> String -> String forall a. [a] -> [a] -> [a] ++ String msg) IO () -> IO a -> IO a forall a b. IO a -> IO b -> IO b forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> BlockedIndefinitelyOnSTM -> IO a forall e a. Exception e => e -> IO a throwIO BlockedIndefinitelyOnSTM exc ]