-- | This package defines a wrapper over the sessiontypes library that allows for evaluating session typed programs to Cloud Haskell programs. -- -- The goal of this library is to allow a user to define two dual session typed programs, spawn two processes and have these processes evaluate the programs. -- -- Session types guarantee that the resulting Cloud Haskell programs correctly implement the protocol and that they are non-deadlocking. -- -- We define a session typed program with an indexed monad `Session` that is both a reader monad and a wrapper over a `STTerm` that uses `Process` as its underlying monad. -- -- This module exports the most important parts of this library: -- -- * "Control.Distributed.Session.Session": Defines the `Session` monad and `SessionInfo` that is used as the environment of `Session`. -- * "Control.Distributed.Session.Eval": Defines the interpreter for evaluation a `Session` to a `Process`. -- * "Control.Distributed.Session.Spawn": Defines several combinators for spawning sessions. -- * "Control.Distributed.Session.Closure": Module for constructing closures of sessions. -- * "Control.Distributed.Session.STChannel": Session typed channel that allows for transmitting values of different types. -- * "Control.Distributed.Session.Lifted": Exports lifted functions from the distributed-process package. -- -- Additionally we defined wrappers for using the interpreters defined in the sessiontypes package on a `Session`: -- -- * "Control.Distributed.Session.Debug" -- * "Control.Distributed.Session.Interactive" -- * "Control.Distributed.Session.Normalize" -- * "Control.Distributed.Session.Visualize" module Control.Distributed.Session ( -- * Core module Control.SessionTypes, -- * Session -- ** Data types Session(..), SessionInfo(..), runSession, -- ** Lifting liftP, liftST, -- * Spawning sessions -- ** Call callLocalSessionP, callLocalSession, callRemoteSessionP, callRemoteSession, callRemoteSessionP', callRemoteSession', -- ** Spawn spawnLLSessionP, spawnLLSession, spawnLRSessionP, spawnLRSession, spawnRRSessionP, spawnRRSession, -- * Eval evalSession, evalSessionEq, evalSessionEq', -- * Closures -- ** Encapsulation SpawnSession (..), SessionWrap (..), -- ** RemoteTable sessionRemoteTable, -- ** Static and Closures -- *** Singular remoteSessionStatic, remoteSessionClosure, remoteSessionStatic', remoteSessionClosure', -- *** SpawnChannel spawnChannelStatic, spawnChannelClosure, -- *** Local Remote Evaluation evalLocalSession, remoteSpawnSessionStatic, remoteSpawnSessionClosure, remoteSpawnSessionStatic', remoteSpawnSessionClosure', -- *** Remote Remote Evaluation rrSpawnSessionSendStatic, rrSpawnSessionSendClosure, rrSpawnSessionExpectStatic, rrSpawnSessionExpectClosure, -- * STChannel -- ** Data types Message(..), STSendPort(..), STReceivePort(..), -- ** Type synonyms STChan, STChanBi, UTChan, -- ** Create newSTChan, newSTChanBi, newUTChan, toSTChan, toSTChanBi, sendProxy, recvProxy, -- ** Usage sendSTChan, recvSTChan, STSplit(..), STRec(..), -- ** Channel transformer STChannelT(..), sendSTChanM, recvSTChanM, sel1ChanM, sel2ChanM, off1ChanM, off2ChanM, recChanM, wkChanM, varChanM, epsChanM, -- * Lifted utsend, usend, expect, expectTimeout, newChan, sendChan, receiveChan, receiveChanTimeout, mergePortsBiased, mergePortsRR, unsafeSend, unsafeSendChan, unsafeNSend, unsafeNSendRemote, receiveWait, receiveTimeout, unwrapMessage, handleMessage, handleMessage_, handleMessageP, handleMessageP_, handleMessageIf, handleMessageIf_, handleMessageIfP, handleMessageIfP_, forward, uforward, delegate, relay, proxy, proxyP, spawn, spawnP, call, callP, terminate, die, kill, exit, catchExit, catchExitP, catchesExit, catchesExitP, getSelfPid, getSelfNode, getOthPid, getOthNode, getProcessInfo, getNodeStats, link, linkNode, unlink, unlinkNode, monitor, monitorNode, monitorPort, unmonitor, withMonitor, withMonitor_, withMonitorP, withMonitorP_, unStatic, unClosure, say, register, unregister, whereis, nsend, registerRemoteAsync, reregisterRemoteAsync, whereisRemoteAsync, nsendRemote, spawnAsync, spawnAsyncP, spawnSupervised, spawnSupervisedP, spawnLink, spawnLinkP, spawnMonitor, spawnMonitorP, spawnChannel, spawnChannelP, spawnLocal, spawnLocalP, spawnChannelLocal, spawnChannelLocalP, callLocal, callLocalP, reconnect, reconnectPort ) where import Control.SessionTypes import Control.Distributed.Session.Session ( Session(..), SessionInfo(..), runSession, liftP, liftST ) import Control.Distributed.Session.Exception () import Control.Distributed.Session.Spawn ( callLocalSessionP, callLocalSession, callRemoteSessionP, callRemoteSession, callRemoteSessionP', callRemoteSession', spawnLLSessionP, spawnLLSession, spawnLRSessionP, spawnLRSession, spawnRRSessionP, spawnRRSession ) import Control.Distributed.Session.Eval ( evalSession, evalSessionEq, evalSessionEq' ) import Control.Distributed.Session.Closure ( SpawnSession (..), SessionWrap (..), sessionRemoteTable, remoteSessionStatic, remoteSessionClosure, remoteSessionStatic', remoteSessionClosure', spawnChannelStatic, spawnChannelClosure, evalLocalSession, remoteSpawnSessionStatic, remoteSpawnSessionClosure, remoteSpawnSessionStatic', remoteSpawnSessionClosure', rrSpawnSessionSendStatic, rrSpawnSessionSendClosure, rrSpawnSessionExpectStatic, rrSpawnSessionExpectClosure ) import Control.Distributed.Session.STChannel ( Message(..), STSendPort(..), STReceivePort(..), STChan, STChanBi, UTChan, newSTChan, newSTChanBi, newUTChan, toSTChan, toSTChanBi, sendProxy, recvProxy, sendSTChan, recvSTChan, STSplit(..), STRec(..), STChannelT(..), sendSTChanM, recvSTChanM, sel1ChanM, sel2ChanM, off1ChanM, off2ChanM, recChanM, wkChanM, varChanM, epsChanM ) import Control.Distributed.Session.Lifted ( utsend, usend, expect, expectTimeout, newChan, sendChan, receiveChan, receiveChanTimeout, mergePortsBiased, mergePortsRR, unsafeSend, unsafeSendChan, unsafeNSend, unsafeNSendRemote, receiveWait, receiveTimeout, unwrapMessage, handleMessage, handleMessage_, handleMessageP, handleMessageP_, handleMessageIf, handleMessageIf_, handleMessageIfP, handleMessageIfP_, forward, uforward, delegate, relay, proxy, proxyP, spawn, spawnP, call, callP, terminate, die, kill, exit, catchExit, catchExitP, catchesExit, catchesExitP, getSelfPid, getSelfNode, getOthPid, getOthNode, getProcessInfo, getNodeStats, link, linkNode, unlink, unlinkNode, monitor, monitorNode, monitorPort, unmonitor, withMonitor, withMonitor_, withMonitorP, withMonitorP_, unStatic, unClosure, say, register, unregister, whereis, nsend, registerRemoteAsync, reregisterRemoteAsync, whereisRemoteAsync, nsendRemote, spawnAsync, spawnAsyncP, spawnSupervised, spawnSupervisedP, spawnLink, spawnLinkP, spawnMonitor, spawnMonitorP, spawnChannel, spawnChannelP, spawnLocal, spawnLocalP, spawnChannelLocal, spawnChannelLocalP, callLocal, callLocalP, reconnect, reconnectPort )