module System.Socket.Internal.Event
  ( threadWaitWrite', threadWaitRead'
  ) where

import GHC.Conc (threadWaitReadSTM, threadWaitWriteSTM, atomically)

import System.Posix.Types ( Fd(..) )

-------------------------------------------------------------------------------
-- Helpers for threadsafe event registration on file descriptors
-------------------------------------------------------------------------------

threadWaitWrite' :: Fd -> IO (IO ())
threadWaitWrite' fd = do
  threadWaitWriteSTM fd >>= return . atomically . fst

threadWaitRead' :: Fd -> IO (IO ())
threadWaitRead' fd = do
  threadWaitReadSTM fd >>= return . atomically . fst