sig
type 'a io
type chan_endpoint
type ('a, 'b) session constraint 'a = [> ] constraint 'b = [> ]
type ('a, 'b, 'c) process
val send :
'a ->
(unit,
([ `Send of 'a * ([> ] as 'b) ], [ `Recv of 'a * ([> ] as 'c) ])
Binary_session.Binary_process.session,
('b, 'c) Binary_session.Binary_process.session)
Binary_session.Binary_process.process
val recv :
unit ->
('a,
([ `Recv of 'a * ([> ] as 'b) ], [ `Send of 'a * ([> ] as 'c) ])
Binary_session.Binary_process.session,
('b, 'c) Binary_session.Binary_process.session)
Binary_session.Binary_process.process
val offer :
('e, ([> ] as 'a, [> ] as 'b) Binary_session.Binary_process.session,
'f)
Binary_session.Binary_process.process ->
('e, ([> ] as 'c, [> ] as 'd) Binary_session.Binary_process.session,
'f)
Binary_session.Binary_process.process ->
('e,
([ `Offer of
('a, 'b) Binary_session.Binary_process.session *
('c, 'd) Binary_session.Binary_process.session ],
[ `Choice of
('b, 'a) Binary_session.Binary_process.session *
('d, 'c) Binary_session.Binary_process.session ])
Binary_session.Binary_process.session, 'f)
Binary_session.Binary_process.process
val choose_left :
('e, ([> ] as 'a, [> ] as 'b) Binary_session.Binary_process.session,
'f)
Binary_session.Binary_process.process ->
('e,
([ `Choice of
('a, 'b) Binary_session.Binary_process.session *
([> ] as 'c, [> ] as 'd) Binary_session.Binary_process.session ],
[ `Offer of
('b, 'a) Binary_session.Binary_process.session *
('d, 'c) Binary_session.Binary_process.session ])
Binary_session.Binary_process.session, 'f)
Binary_session.Binary_process.process
val choose_right :
('e, ([> ] as 'a, [> ] as 'b) Binary_session.Binary_process.session,
'f)
Binary_session.Binary_process.process ->
('e,
([ `Choice of
([> ] as 'c, [> ] as 'd) Binary_session.Binary_process.session *
('a, 'b) Binary_session.Binary_process.session ],
[ `Offer of
('d, 'c) Binary_session.Binary_process.session *
('b, 'a) Binary_session.Binary_process.session ])
Binary_session.Binary_process.session, 'f)
Binary_session.Binary_process.process
val stop :
'a ->
('a, ([ `Stop ], [ `Stop ]) Binary_session.Binary_process.session, unit)
Binary_session.Binary_process.process
val lift_io :
'a Binary_session.Binary_process.io ->
('a, 'b, 'b) Binary_session.Binary_process.process
val return : 'a -> ('a, 'b, 'b) Binary_session.Binary_process.process
val ( >>= ) :
('a, 'b, 'c) Binary_session.Binary_process.process ->
('a -> ('d, 'c, 'e) Binary_session.Binary_process.process) ->
('d, 'b, 'e) Binary_session.Binary_process.process
val run_processes :
('a, ([> ] as 'b, [> ] as 'c) Binary_session.Binary_process.session,
unit)
Binary_session.Binary_process.process ->
('d, ('c, 'b) Binary_session.Binary_process.session, unit)
Binary_session.Binary_process.process ->
((unit -> 'a Binary_session.Binary_process.io) *
(unit -> 'd Binary_session.Binary_process.io))
Binary_session.Binary_process.io
end