{-# LANGUAGE CPP #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UnliftedFFITypes #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module TextShow.Control.Concurrent () where
import Data.Text.Lazy.Builder (fromString)
import Foreign.C.Types
import GHC.Conc (BlockReason, ThreadStatus)
import GHC.Conc.Sync (ThreadId(..))
import GHC.Prim
import Prelude ()
import Prelude.Compat
import TextShow.Classes (TextShow(..))
import TextShow.Foreign.C.Types ()
import TextShow.TH.Internal (deriveTextShow)
#if MIN_VERSION_base(4,14,0)
import TextShow.Classes (showbParen)
import GHC.Show (appPrec)
#endif
instance TextShow ThreadId where
showbPrec p t =
#if MIN_VERSION_base(4,14,0)
showbParen (p > appPrec) $
#endif
fromString "ThreadId " <> showbPrec p (getThreadId t)
{-# INLINE showbPrec #-}
foreign import ccall unsafe "rts_getThreadId" getThreadId# :: Addr# -> CInt
getThreadId :: ThreadId -> CInt
getThreadId (ThreadId tid) = getThreadId# (unsafeCoerce# tid)
$(deriveTextShow ''BlockReason)
$(deriveTextShow ''ThreadStatus)