-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Basic Erlang-like process support for Haskell
--
@package eprocess
@version 1.7.2
-- | This module provides a *very* basic support for processes with message
-- queues. It was built using channels and MVars.
module Control.Concurrent.Process
-- | The ReceiverT generic type.
--
--
-- - r the type of things the process will receive
-- - m the monad in which it will run
-- - a the classic monad parameter
--
data ReceiverT r m a
-- | A Process handle. It's returned on process creation and should be used
-- | afterwards to send messages to it
data Handle r
-- | Process are receivers that run in the IO Monad
type Process r = ReceiverT r IO
-- | makeProcess builds a process from a code that generates an IO
-- action. Usage: process <- makeProcess evalFunction receiver
--
makeProcess :: (m t -> IO s) -> ReceiverT r m t -> Process r s
-- | runHere executes process code in the current environment.
-- Usage: result <- runHere process
runHere :: MonadIO m => Process r t -> m t
-- | spawn starts a process and returns its handle. Usage:
-- handle <- spawn process
spawn :: MonadIO m => Process r k -> m (Handle r)
-- | kill lets you *brutally* terminate a running process. Usage:
-- kill processHandle
kill :: MonadIO m => Handle a -> m ()
-- | self returns the handle of the current process. Usage:
-- handle <- self
self :: Monad m => ReceiverT r m (Handle r)
-- | sendTo lets you send a message to a running process. Usage:
-- sendTo processHandle message
sendTo :: MonadIO m => Handle a -> a -> m ()
-- | recv lets you receive a message in a running process (it's a
-- blocking receive). Usage: message <- recv
recv :: MonadIO m => ReceiverT r m r
-- | Just like recv but with a timeout parameter. Usage:
-- maybeMessage <- recv
recvIn :: MonadIO m => Int -> ReceiverT r m (Maybe r)
-- | sendRecv is just a syntactic sugar for: sendTo h a
-- >> recv
sendRecv :: MonadIO m => Handle a -> a -> ReceiverT r m r
instance Functor m => Functor (ReceiverT r m)
instance Applicative m => Applicative (ReceiverT r m)
instance Monad m => Monad (ReceiverT r m)
instance MonadIO m => MonadIO (ReceiverT r m)
instance MonadTrans (ReceiverT r)
instance MonadCatch m => MonadCatch (ReceiverT r m)
instance MonadThrow m => MonadThrow (ReceiverT r m)
instance MonadMask m => MonadMask (ReceiverT r m)
instance MonadError e m => MonadError e (ReceiverT r m)
instance (Monoid w, MonadWriter w m) => MonadWriter w (ReceiverT w m)
instance MonadReader r m => MonadReader r (ReceiverT r m)
instance MonadState s m => MonadState s (ReceiverT r m)