sessions-2008.5.12: Session Types for HaskellSource codeContentsIndex
Control.Concurrent.Session.Types
Synopsis
data Cell where
Cell :: val -> MVar (Cell nxt) -> Cell (Cons val nxt)
SelectCell :: Int -> Cell (Cons (Choice jumps) Nil)
data ProgramCell where
ProgramCell :: MVar a -> MVar (ProgramCell a) -> ProgramCell a
class ProgramToMVarsOutgoing progRef prog mvars | progRef prog -> mvars where
type ProgramToMVarsOutgoingT progRef prog
programToMVarsOutgoing :: progRef -> prog -> IO mvars
data SessionState where
SessionState :: (ProgramToMVarsOutgoingT prog prog ~ progOut, ProgramToMVarsOutgoingT prog' prog' ~ progIn) => progOut -> progIn -> current -> MVar (Maybe (Chan ())) -> MVar (Cell currentOutgoing) -> MVar (Maybe (Chan ())) -> MVar (Cell currentIncoming) -> SessionState prog prog' (current, currentOutgoing, currentIncoming)
newtype SessionChain prog prog' from to res = SessionChain {
runSessionChain :: SessionState prog prog' from -> IO (res, SessionState prog prog' to)
}
type RawPid = [Int]
data Pid where
Pid :: RawPid -> TyMap sessionsToIdx idxsToPairStructs -> Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs
data InternalPid where
IPid :: Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs -> [RawPid] -> InternalPid prog prog' invertedSessions sessionsToIdx idxsToPairStructs
pidToRawPid :: Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs -> RawPid
iPidToPid :: InternalPid prog prog' invertedSessions sessionsToIdx idxsToPairStructs -> Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs
class PidEq a b where
(=~=) :: a -> b -> Bool
newtype InterleavedChain internalPid from to res = InterleavedChain {
runInterleavedChain :: internalPid -> from -> IO (res, to, internalPid)
}
data SpecialSession
data SpecialPid
data SpecialNormal
data PairStruct where
PS :: RawPid -> (SessionState prog prog' (Cons (Jump init) Nil, Cons (Jump init) Nil, Cons (Jump init) Nil) -> IO ()) -> PairStruct init prog prog' (Cons (Jump init) Nil, Cons (Jump init) Nil, Cons (Jump init) Nil)
Documentation
data Cell whereSource
Constructors
Cell :: val -> MVar (Cell nxt) -> Cell (Cons val nxt)
SelectCell :: Int -> Cell (Cons (Choice jumps) Nil)
data ProgramCell whereSource
Constructors
ProgramCell :: MVar a -> MVar (ProgramCell a) -> ProgramCell a
class ProgramToMVarsOutgoing progRef prog mvars | progRef prog -> mvars whereSource
Associated Types
type ProgramToMVarsOutgoingT progRef prog Source
Methods
programToMVarsOutgoing :: progRef -> prog -> IO mvarsSource
show/hide Instances
ProgramToMVarsOutgoing ref Nil Nil
(Outgoing val'' ~ val', ProgramToMVarsOutgoing ref nxt nxt', TyList nxt, TyList nxt', Expand ref val val'') => ProgramToMVarsOutgoing ref (Cons val nxt) (Cons (MVar (ProgramCell (Cell val'))) nxt')
data SessionState whereSource
Constructors
SessionState :: (ProgramToMVarsOutgoingT prog prog ~ progOut, ProgramToMVarsOutgoingT prog' prog' ~ progIn) => progOut -> progIn -> current -> MVar (Maybe (Chan ())) -> MVar (Cell currentOutgoing) -> MVar (Maybe (Chan ())) -> MVar (Cell currentIncoming) -> SessionState prog prog' (current, currentOutgoing, currentIncoming)
newtype SessionChain prog prog' from to res Source
The representation of a computation that performs work using session types. Again, really quite similar to a more-parameterized State monad.
Constructors
SessionChain
runSessionChain :: SessionState prog prog' from -> IO (res, SessionState prog prog' to)
show/hide Instances
SMonadIO (SessionChain prog prog')
SMonad (SessionChain prog prog')
type RawPid = [Int]Source
data Pid whereSource
A process ID. This is a tiny bit like ThreadId but rather heavily annotated.
Constructors
Pid :: RawPid -> TyMap sessionsToIdx idxsToPairStructs -> Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs
show/hide Instances
(TySubList invertedSessionsB invertedSessionsA True, TySubList sessionsToIdxB sessionsToIdxA True, ReducePairStructs (TyMap sessionsToIdxA idxsToPairStructsA) (TyMap sessionsToIdxB idxsToPairStructsB) (TyMap Nil Nil) (TyMap sessionsToIdxB idxsToPairStructsB)) => CompatibleTypes SpecialPid (Pid prog prog' invertedSessionsA sessionsToIdxA idxsToPairStructsA) (Pid prog prog' invertedSessionsB sessionsToIdxB idxsToPairStructsB)
Eq (Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs)
Ord (Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs)
Show (Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs)
PidEq (Pid progA progA' invertedSessionsA sessionsToIdxA idxsToPairStructsA) (Pid progB progB' invertedSessionsB sessionsToIdxB idxsToPairStructsB)
data InternalPid whereSource
Constructors
IPid :: Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs -> [RawPid] -> InternalPid prog prog' invertedSessions sessionsToIdx idxsToPairStructs
show/hide Instances
Eq (InternalPid prog prog' invertedSessions sessionsToIdx idxsToPairStructs)
Ord (InternalPid prog prog' invertedSessions sessionsToIdx idxsToPairStructs)
pidToRawPid :: Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructs -> RawPidSource
iPidToPid :: InternalPid prog prog' invertedSessions sessionsToIdx idxsToPairStructs -> Pid prog prog' invertedSessions sessionsToIdx idxsToPairStructsSource
class PidEq a b whereSource
Provides a way to compare two Pids. Of course, if the Pids have different type params, then they are definitely different, but it's still convenient to be able to do something like (==) on them.
Methods
(=~=) :: a -> b -> BoolSource
show/hide Instances
PidEq (Pid progA progA' invertedSessionsA sessionsToIdxA idxsToPairStructsA) (Pid progB progB' invertedSessionsB sessionsToIdxB idxsToPairStructsB)
newtype InterleavedChain internalPid from to res Source
Constructors
InterleavedChain
runInterleavedChain :: internalPid -> from -> IO (res, to, internalPid)
show/hide Instances
data SpecialSession Source
show/hide Instances
data SpecialPid Source
show/hide Instances
(TySubList invertedSessionsB invertedSessionsA True, TySubList sessionsToIdxB sessionsToIdxA True, ReducePairStructs (TyMap sessionsToIdxA idxsToPairStructsA) (TyMap sessionsToIdxB idxsToPairStructsB) (TyMap Nil Nil) (TyMap sessionsToIdxB idxsToPairStructsB)) => CompatibleTypes SpecialPid (Pid prog prog' invertedSessionsA sessionsToIdxA idxsToPairStructsA) (Pid prog prog' invertedSessionsB sessionsToIdxB idxsToPairStructsB)
data SpecialNormal Source
show/hide Instances
data PairStruct whereSource
Constructors
PS :: RawPid -> (SessionState prog prog' (Cons (Jump init) Nil, Cons (Jump init) Nil, Cons (Jump init) Nil) -> IO ()) -> PairStruct init prog prog' (Cons (Jump init) Nil, Cons (Jump init) Nil, Cons (Jump init) Nil)
show/hide Instances
Eq (PairStruct init prog prog' start)
Ord (PairStruct init prog prog' start)
Produced by Haddock version 2.4.2