-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | monad-control style typeclass and transformer instances for Process monad. -- -- This package provides typeclasses and functions for lifting functions -- and control operations (such as spawnLocal) from the Process -- monad into transformer stacks based on the Process monad. It uses -- MonadTransControl and a new typeclass -- Control.Distributed.Process.Lifted.Class.MonadProcessBase which -- plays the same role as MonadBaseControl. Instances are provided -- for all the transformers types - so stacks based on any of -- these (e.g. ReaderT Config Process a) can be used seamlessly. -- -- The Control.Distributed.Process.Lifted module exports all the same -- symbols as found in Control.Distributed.Process, but they are all -- generalized. Where appropriate it re-exports the more general -- functions from lifted-base (e.g. catch) rather than the versions -- re-implemented for Process. @package distributed-process-lifted @version 0.3.0.1 module Control.Distributed.Process.Lifted.Class -- | A class into instances of which Process operations can be lifted; -- similar to MonadIO or MonadBase. class (Monad m, MonadIO m, MonadBase IO m, MonadBaseControl IO m) => MonadProcess m -- | lift a base Process computation into the current monad liftP :: MonadProcess m => Process a -> m a -- | A Clone of MonadBaseControl specialized to the Process monad. -- This uses the MonadTransControl typeclass for transformer -- default instances, so the core wrapping/unwrapping logic is not -- duplicated. This class is needed because the MonadBaseControl instance -- for Process has IO as the base. class (MonadProcess m) => MonadProcessBase m where { type family StMP m a :: *; } liftBaseWithP :: MonadProcessBase m => (RunInBaseP m -> Process a) -> m a restoreMP :: MonadProcessBase m => StMP m a -> m a -- | A clone of RunInBase for MonadProcessBase. type RunInBaseP m = forall a. m a -> Process (StMP m a) -- | A clone of ComposeSt for MonadProcessBase. type ComposeStP t m a = StMP m (StT t a) -- | A clone of RunInBaseDefault for MonadProcessBase. type RunInBaseDefaultP t m = forall a. t m a -> Process (ComposeStP t m a) -- | A clone of defaultLiftBaseWith for MonadProcessBase. This -- re-uses the MonadTransControl typeclass the same way as the original; -- core wrapping/unwrapping logic for each transformer type is not -- duplicated. defaultLiftBaseWithP :: (MonadTransControl t, MonadProcessBase m) => (RunInBaseDefaultP t m -> Process a) -> t m a -- | A clone of defaultRestoreMP for MonadProcessBase. This re-uses -- the MonadTransControl typeclass the same way as the original; core -- wrapping/unwrapping logic for each transformer type is not duplicated. defaultRestoreMP :: (MonadTransControl t, MonadProcessBase m) => ComposeStP t m a -> t m a -- | A clone of control for MonadProcessBase. controlP :: MonadProcessBase m => (RunInBaseP m -> Process (StMP m a)) -> m a -- | A clone of liftBaseDiscard for MonadProcessBase. liftBaseDiscardP :: MonadProcessBase m => (Process () -> Process a) -> m () -> m a instance Control.Distributed.Process.Lifted.Class.MonadProcessBase m => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.Identity.IdentityT m) instance Control.Distributed.Process.Lifted.Class.MonadProcessBase m => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.Maybe.MaybeT m) instance Control.Distributed.Process.Lifted.Class.MonadProcessBase m => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.List.ListT m) instance Control.Distributed.Process.Lifted.Class.MonadProcessBase m => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.Reader.ReaderT r m) instance Control.Distributed.Process.Lifted.Class.MonadProcessBase m => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.State.Strict.StateT s m) instance Control.Distributed.Process.Lifted.Class.MonadProcessBase m => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.State.Lazy.StateT s m) instance Control.Distributed.Process.Lifted.Class.MonadProcessBase m => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.Except.ExceptT e m) instance (GHC.Base.Monoid w, Control.Distributed.Process.Lifted.Class.MonadProcessBase m) => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.Writer.Strict.WriterT w m) instance (GHC.Base.Monoid w, Control.Distributed.Process.Lifted.Class.MonadProcessBase m) => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance (GHC.Base.Monoid w, Control.Distributed.Process.Lifted.Class.MonadProcessBase m) => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.RWS.Strict.RWST r w s m) instance (GHC.Base.Monoid w, Control.Distributed.Process.Lifted.Class.MonadProcessBase m) => Control.Distributed.Process.Lifted.Class.MonadProcessBase (Control.Monad.Trans.RWS.Lazy.RWST r w s m) instance Control.Distributed.Process.Lifted.Class.MonadProcessBase Control.Distributed.Process.Internal.Types.Process instance Control.Distributed.Process.Lifted.Class.MonadProcess Control.Distributed.Process.Internal.Types.Process instance Control.Distributed.Process.Lifted.Class.MonadProcess m => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.Identity.IdentityT m) instance Control.Distributed.Process.Lifted.Class.MonadProcess m => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.Maybe.MaybeT m) instance Control.Distributed.Process.Lifted.Class.MonadProcess m => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.List.ListT m) instance Control.Distributed.Process.Lifted.Class.MonadProcess m => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.Reader.ReaderT r m) instance Control.Distributed.Process.Lifted.Class.MonadProcess m => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.State.Strict.StateT s m) instance Control.Distributed.Process.Lifted.Class.MonadProcess m => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.State.Lazy.StateT s m) instance Control.Distributed.Process.Lifted.Class.MonadProcess m => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.Except.ExceptT e m) instance (GHC.Base.Monoid w, Control.Distributed.Process.Lifted.Class.MonadProcess m) => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.Writer.Strict.WriterT w m) instance (GHC.Base.Monoid w, Control.Distributed.Process.Lifted.Class.MonadProcess m) => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance (GHC.Base.Monoid w, Control.Distributed.Process.Lifted.Class.MonadProcess m) => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.RWS.Strict.RWST r w s m) instance (GHC.Base.Monoid w, Control.Distributed.Process.Lifted.Class.MonadProcess m) => Control.Distributed.Process.Lifted.Class.MonadProcess (Control.Monad.Trans.RWS.Lazy.RWST r w s m) module Control.Distributed.Process.Lifted (.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d -- | Generalized version of spawnLocal spawnLocal :: (MonadProcessBase m) => m () -> m ProcessId -- | Generalized version of getSelfPid getSelfPid :: (MonadProcess m) => m ProcessId -- | Generalized version of expect expect :: (MonadProcess m) => forall a. Serializable a => m a -- | Generalized version of expectTimeout expectTimeout :: (MonadProcess m) => forall a. Serializable a => Int -> m (Maybe a) -- | Generalized version of register register :: (MonadProcess m) => String -> ProcessId -> m () -- | Generalized version of whereis whereis :: (MonadProcess m) => String -> m (Maybe ProcessId) -- | Generalized version of catchesExit catchesExit :: forall m a. (MonadProcessBase m) => m a -> [ProcessId -> Message -> m (Maybe a)] -> m a -- | Generalized version of delegate delegate :: MonadProcess m => ProcessId -> (Message -> Bool) -> m () -- | Generalized version of forward forward :: MonadProcess m => Message -> ProcessId -> m () -- | Generalized version of getLocalNodeStats getLocalNodeStats :: MonadProcess m => m NodeStats -- | Generalized version of getNodeStats getNodeStats :: MonadProcess m => NodeId -> m (Either DiedReason NodeStats) -- | Generalized version of getProcessInfo getProcessInfo :: MonadProcess m => ProcessId -> m (Maybe ProcessInfo) -- | Generalized version of getSelfNode getSelfNode :: MonadProcess m => m NodeId -- | Generalized version of kill kill :: MonadProcess m => ProcessId -> String -> m () -- | Generalized version of link link :: MonadProcess m => ProcessId -> m () -- | Generalized version of linkNode linkNode :: MonadProcess m => NodeId -> m () -- | Generalized version of linkPort linkPort :: MonadProcess m => SendPort a -> m () -- | Generalized version of monitor monitor :: MonadProcess m => ProcessId -> m MonitorRef -- | Generalized version of monitorNode monitorNode :: MonadProcess m => NodeId -> m MonitorRef -- | Generalized version of receiveTimeout receiveTimeout :: MonadProcess m => Int -> [Match b] -> m (Maybe b) -- | Generalized version of receiveWait receiveWait :: MonadProcess m => [Match b] -> m b -- | Generalized version of reconnect reconnect :: MonadProcess m => ProcessId -> m () -- | Generalized version of reconnectPort reconnectPort :: MonadProcess m => SendPort a -> m () -- | Generalized version of registerRemoteAsync registerRemoteAsync :: MonadProcess m => NodeId -> String -> ProcessId -> m () -- | Generalized version of relay relay :: MonadProcess m => ProcessId -> m () -- | Generalized version of reregister reregister :: MonadProcess m => String -> ProcessId -> m () -- | Generalized version of reregisterRemoteAsync reregisterRemoteAsync :: MonadProcess m => NodeId -> String -> ProcessId -> m () -- | Generalized version of say say :: MonadProcess m => String -> m () -- | Generalized version of spawn spawn :: MonadProcess m => NodeId -> Closure (Process ()) -> m ProcessId -- | Generalized version of spawnAsync spawnAsync :: MonadProcess m => NodeId -> Closure (Process ()) -> m SpawnRef -- | Generalized version of spawnLink spawnLink :: MonadProcess m => NodeId -> Closure (Process ()) -> m ProcessId -- | Generalized version of spawnMonitor spawnMonitor :: MonadProcess m => NodeId -> Closure (Process ()) -> m (ProcessId, MonitorRef) -- | Generalized version of spawnSupervised spawnSupervised :: MonadProcess m => NodeId -> Closure (Process ()) -> m (ProcessId, MonitorRef) -- | Generalized version of terminate terminate :: MonadProcess m => m a -- | Generalized version of unlink unlink :: MonadProcess m => ProcessId -> m () -- | Generalized version of unlinkNode unlinkNode :: MonadProcess m => NodeId -> m () -- | Generalized version of unlinkPort unlinkPort :: MonadProcess m => SendPort a -> m () -- | Generalized version of unmonitor unmonitor :: MonadProcess m => MonitorRef -> m () -- | Generalized version of unregister unregister :: MonadProcess m => String -> m () -- | Generalized version of unregisterRemoteAsync unregisterRemoteAsync :: MonadProcess m => NodeId -> String -> m () -- | Generalized version of whereisRemoteAsync whereisRemoteAsync :: MonadProcess m => NodeId -> String -> m () -- | Generalized version of withMonitor withMonitor :: ProcessId -> (MonitorRef -> Process a) -> Process a -- | Generalized version of withMonitor_ withMonitor_ :: MonadProcessBase m => ProcessId -> m a -> m a -- | Generalized version of call call :: (MonadProcess m, Serializable a) => Static (SerializableDict a) -> NodeId -> Closure (Process a) -> m a -- | Generalized version of catchExit catchExit :: (MonadProcessBase m, Show a, Serializable a) => m b -> (ProcessId -> a -> m b) -> m b -- | Generalized version of die die :: (MonadProcess m, Serializable a) => a -> m b -- | Generalized version of exit exit :: (MonadProcess m, Serializable a) => ProcessId -> a -> m () -- | Generalized version of handleMessage handleMessage :: (MonadProcess m, Serializable a) => Message -> (a -> Process b) -> m (Maybe b) -- | Generalized version of handleMessageIf handleMessageIf :: (MonadProcess m, Serializable a) => Message -> (a -> Bool) -> (a -> Process b) -> m (Maybe b) -- | Generalized version of handleMessageIf_ handleMessageIf_ :: (MonadProcess m, Serializable a) => Message -> (a -> Bool) -> (a -> Process ()) -> m () -- | Generalized version of handleMessage_ handleMessage_ :: (MonadProcess m, Serializable a) => Message -> (a -> Process ()) -> m () -- | Generalized version of mergePortsBiased mergePortsBiased :: (MonadProcess m, Serializable a) => [ReceivePort a] -> m (ReceivePort a) -- | Generalized version of mergePortsRR mergePortsRR :: (MonadProcess m, Serializable a) => [ReceivePort a] -> m (ReceivePort a) -- | Generalized version of monitorPort monitorPort :: (MonadProcess m, Serializable a) => SendPort a -> m MonitorRef -- | Generalized version of newChan newChan :: (MonadProcess m, Serializable a) => m (SendPort a, ReceivePort a) -- | Generalized version of nsend nsend :: (MonadProcess m, Serializable a) => String -> a -> m () -- | Generalized version of nsendRemote nsendRemote :: (MonadProcess m, Serializable a) => NodeId -> String -> a -> m () -- | Generalized version of proxy proxy :: (MonadProcess m, Serializable a) => ProcessId -> (a -> Process Bool) -> m () -- | Generalized version of receiveChan receiveChan :: (MonadProcess m, Serializable a) => ReceivePort a -> m a -- | Generalized version of receiveChanTimeout receiveChanTimeout :: (MonadProcess m, Serializable a) => Int -> ReceivePort a -> m (Maybe a) -- | Generalized version of send send :: (MonadProcess m, Serializable a) => ProcessId -> a -> m () -- | Generalized version of sendChan sendChan :: (MonadProcess m, Serializable a) => SendPort a -> a -> m () -- | Generalized version of spawnChannel spawnChannel :: (MonadProcess m, Serializable a) => Static (SerializableDict a) -> NodeId -> Closure (ReceivePort a -> Process ()) -> m (SendPort a) -- | Generalized version of spawnChannelLocal spawnChannelLocal :: (MonadProcess m, Serializable a) => (ReceivePort a -> Process ()) -> m (SendPort a) -- | Generalized version of unClosure unClosure :: (MonadProcess m, Typeable a) => Closure a -> m a -- | Generalized version of unStatic unStatic :: (MonadProcess m, Typeable a) => Static a -> m a -- | Generalized version of unsafeNSend unsafeNSend :: (MonadProcess m, Serializable a) => String -> a -> m () -- | Generalized version of unsafeSend unsafeSend :: (MonadProcess m, Serializable a) => ProcessId -> a -> m () -- | Generalized version of unsafeSendChan unsafeSendChan :: (MonadProcess m, Serializable a) => SendPort a -> a -> m () -- | Generalized version of unwrapMessage unwrapMessage :: (MonadProcess m, Serializable a) => Message -> m (Maybe a) module Control.Distributed.Process.Node.Lifted -- | Generalized version of putMVar. closeLocalNode :: MonadBase IO m => LocalNode -> m () -- | Generalized version of forkProcess. forkProcess :: MonadBase IO m => LocalNode -> Process () -> m ProcessId -- | Generalized version of newLocalNode. newLocalNode :: MonadBase IO m => Transport -> RemoteTable -> m LocalNode -- | Generalized version of runProcess runProcess :: MonadBase IO m => LocalNode -> Process () -> m () -- | Local nodes data LocalNode :: * initRemoteTable :: RemoteTable -- | NodeId of the node localNodeId :: LocalNode -> NodeId -- | Utility functions for working with Processes outside of the -- Process monad. module Control.Distributed.Process.Lifted.Extras -- | A variant of runProcess which returns a value. This works just -- like runProcess by forking a new process with a captured -- MVar, but it will return the result of the computation. If the -- computation throws an exception, it will be re-thrown by -- fromProcess in the calling thread. fromProcess :: forall a m. (MonadBase IO m) => LocalNode -> Process a -> m a -- | Represents a handle to a process runner that communicates through a -- Chan. Create with spawnProxy or spawnProxyIO. Use -- this to call process actions (using fromProxy or -- inProxy) from any IO that will be executed in a single process -- that will have a persistent pid and mailbox across invocations. -- Sharing a single proxy between threads may yield poor performance and -- is not advised. data ProcessProxy proxyPid :: ProcessProxy -> ProcessId -- | Spawn a new process and return a ProcessProxy handle for it. spawnProxy :: Process ProcessProxy -- | Same as spawnProxy but can be used from any IO -- -- spawnProxyIO node = fromProcess node spawnProxy spawnProxyIO :: forall m. (MonadBase IO m) => LocalNode -> m ProcessProxy -- | Use a ProcessProxy created with spawnProxy to run a -- Process computation in the existing Process asynchronously. inProxy :: forall m. (MonadBase IO m) => ProcessProxy -> Process () -> m () -- | Use a ProcessProxy created with spawnProxy to run a -- Process computation in the existing Process and return the result in -- any IO. fromProxy :: forall a m. (MonadBase IO m) => ProcessProxy -> Process a -> m a instance GHC.Show.Show Control.Distributed.Process.Lifted.Extras.ProcessProxy