{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances, FlexibleInstances #-}

module Net.IO(module Net) where
import qualified Control.Concurrent as IO
import Data.IORef
import Net.Concurrent as Net

instance ForkIO IO where
  fork :: IO () -> IO ThreadId
fork = IO () -> IO ThreadId
IO.forkIO
  kill :: ThreadId -> IO ()
kill = ThreadId -> IO ()
IO.killThread

instance DelayIO IO where
  delay :: Int -> IO ()
delay = Int -> IO ()
IO.threadDelay

instance ChannelIO IO.Chan IO where
  newChan :: forall a. IO (Chan a)
newChan = IO (Chan a)
forall a. IO (Chan a)
IO.newChan
  readChan :: forall a. Chan a -> IO a
readChan = Chan a -> IO a
forall a. Chan a -> IO a
IO.readChan
  writeChan :: forall a. Chan a -> a -> IO ()
writeChan = Chan a -> a -> IO ()
forall a. Chan a -> a -> IO ()
IO.writeChan

instance MVarIO IO.MVar IO where
  newEmptyMVar :: forall a. IO (MVar a)
newEmptyMVar = IO (MVar a)
forall a. IO (MVar a)
IO.newEmptyMVar
  newMVar :: forall a. a -> IO (MVar a)
newMVar = a -> IO (MVar a)
forall a. a -> IO (MVar a)
IO.newMVar
  putMVar :: forall a. MVar a -> a -> IO ()
putMVar = MVar a -> a -> IO ()
forall a. MVar a -> a -> IO ()
IO.putMVar
  takeMVar :: forall a. MVar a -> IO a
takeMVar = MVar a -> IO a
forall a. MVar a -> IO a
IO.takeMVar
  readMVar :: forall a. MVar a -> IO a
readMVar = MVar a -> IO a
forall a. MVar a -> IO a
IO.readMVar

instance RefIO IORef IO where
  newRef :: forall a. a -> IO (IORef a)
newRef = a -> IO (IORef a)
forall a. a -> IO (IORef a)
newIORef
  readRef :: forall a. IORef a -> IO a
readRef = IORef a -> IO a
forall a. IORef a -> IO a
readIORef
  writeRef :: forall a. IORef a -> a -> IO ()
writeRef = IORef a -> a -> IO ()
forall a. IORef a -> a -> IO ()
writeIORef