module Control.Concurrent(
  ThreadId,
  forkIO,
  ) where
import Prelude()              -- do not import Prelude
import Primitives
import Prelude
import Data.Word

newtype ThreadId = ThreadId (Ptr ())

instance Show ThreadId where
  show (ThreadId p) = "ThreadId#" ++ show (primPtrToWord p)

instance Eq ThreadId where
  ThreadId p == ThreadId q  =  primPtrEQ p q

instance Ord ThreadId where
  ThreadId p `compare` ThreadId q = p `compare` q

primForkIO :: IO () -> IO (Ptr ())
primForkIO = primitive "IO.fork"

forkIO :: IO () -> IO ThreadId
forkIO io = ThreadId <$> primForkIO io