{-# 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)
instance TextShow ThreadId where
showbPrec p t = 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 ''ThreadStatus)
$(deriveTextShow ''BlockReason)