module Ki.Debug ( debug, ) where import Control.Concurrent import System.IO.Unsafe (unsafePerformIO) import Prelude debug :: Monad m => String -> m () debug :: String -> m () debug String message = IO () -> () forall a. IO a -> a unsafePerformIO IO () output () -> m () -> m () `seq` () -> m () forall (f :: * -> *) a. Applicative f => a -> f a pure () where output :: IO () output :: IO () output = do ThreadId threadId <- IO ThreadId myThreadId MVar () -> (() -> IO ()) -> IO () forall a b. MVar a -> (a -> IO b) -> IO b withMVar MVar () lock \() _ -> String -> IO () putStrLn (String "[" String -> String -> String forall a. [a] -> [a] -> [a] ++ ThreadId -> String forall a. Show a => a -> String show ThreadId threadId String -> String -> String forall a. [a] -> [a] -> [a] ++ String "] " String -> String -> String forall a. [a] -> [a] -> [a] ++ String message) lock :: MVar () lock :: MVar () lock = IO (MVar ()) -> MVar () forall a. IO a -> a unsafePerformIO (() -> IO (MVar ()) forall a. a -> IO (MVar a) newMVar ()) {-# NOINLINE lock #-}