module Monadic:sig
..end
type ('t0, 't1, 'a)
t
The type of a computation that returns a result of type 'a
while using a session endpoint and changing its type from 't0
to
't1
.
val return : 'm -> ('t0, 't0, 'm) t
return e
is the trivial monadic computation that does not
perform communications and returns the value of e
.
val (>>=) : ('t0, 't1, 'a) t ->
('a -> ('t1, 't2, 'b) t) -> ('t0, 't2, 'b) t
The monadic composition operator.
val (>>>) : ('t0, 't1, 'a) t ->
('t1, 't2, 'b) t -> ('t0, 't2, 'b) t
m1 >>> m2
is a shortcut for m1 >>= fun _ -> m2
.
val fix : (('t0, 't1, 'a) t -> ('t0, 't1, 'a) t) ->
('t0, 't1, 'a) t
Fixpoint operator for monadic computations. fix (fun x -> m)
represents the same computation as m
in which x
is bound to m
itself.
val connect : (('a, 'b) Session.st, Session.et, unit) t ->
(('b, 'a) Session.st, Session.et, 'm) t -> 'm
connect ms mc
creates a new session that connects the server
ms
, spawned into a new thread, and the client mc
. The result is
that returned by the client.
val receive : (('m * ('a, 'b) Session.st) Session.it, ('a, 'b) Session.st, 'm)
t
receive
waits for a message from the session endpoint and
returns its value.
val send : 'm ->
(('m * ('b, 'a) Session.st) Session.ot, ('a, 'b) Session.st, unit)
t
send e
sends the message e
on the session endpoint.
val branch : ('t0, 't2, 'a) t ->
('t1, 't2, 'a) t ->
(('t0, 't1) Session.choice Session.it, 't2, 'a) t
branch mtrue mfalse
accepts a boolean selection from the
session endpoint and executes either mtrue
or mfalse
accordingly.
val select_true : ((('b, 'a) Session.st, ('d, 'c) Session.st) Session.choice Session.ot,
('a, 'b) Session.st, unit)
t
select_true
selects the True
branch of a choice.
val select_false : ((('b, 'a) Session.st, ('d, 'c) Session.st) Session.choice Session.ot,
('c, 'd) Session.st, unit)
t
select_false
selects the False
branch of a choice.