simple-sessions-0.1.3: A simple implementation of session types

Safe HaskellNone

Control.Concurrent.SimpleSession.Positional

Synopsis

Documentation

data Cap t e r Source

io :: IO a -> Session s s aSource

send :: Channel t -> a -> Session (Cap t e (a :!: r), x) (Cap t e r, x) ()Source

recv :: Channel t -> Session (Cap t e (a :?: r), x) (Cap t e r, x) aSource

close :: Channel t -> Session (Cap t e Eps, x) x ()Source

sel1 :: Channel t -> Session (Cap t e (r :+: s), x) (Cap t e r, x) ()Source

sel2 :: Channel t -> Session (Cap t e (r :+: s), x) (Cap t e s, x) ()Source

offer :: Channel t -> Session (Cap t e r, x) u a -> Session (Cap t e s, x) u a -> Session (Cap t e (r :&: s), x) u aSource

send_cap :: Channel t -> Session (Cap t e (Cap t' e' r' :!: r), (Cap t' e' r', x)) (Cap t e r, x) ()Source

recv_cap :: Channel t -> Session (Cap t e (Cap t' e' r' :?: r), x) (Cap t e r, (Cap t' e' r', x)) ()Source

enter :: Channel t -> Session (Cap t e (Rec r), x) (Cap t (r, e) r, x) ()Source

zero :: Channel t -> Session (Cap t (r, e) (Var Z), x) (Cap t (r, e) r, x) ()Source

suc :: Session (Cap t (r, e) (Var (S v)), x) (Cap t e (Var v), x) ()Source

dig :: Session x x' a -> Session (r, x) (r, x') aSource

swap :: Session (r, (s, x)) (s, (r, x)) ()Source

swap| may be combined to exchange any two adjacent capabilities.

forkSession :: Session x () () -> Session x () ()Source

accept :: Rendezvous r -> (forall t. Channel t -> Session (Cap t () r, x) y a) -> Session x y aSource

request :: Dual r r' => Rendezvous r -> (forall t. Channel t -> Session (Cap t () r', x) y a) -> Session x y aSource

runSession :: Session () () a -> IO aSource