type ('l, 'r) either =
| L of 'l
| R of 'r
type 't impl = {
bind : 'a 'b. ('a, 't) io -> ('a -> ('b, 't) io) -> ('b, 't) io;
return : 'a. 'a -> ('a, 't) io;
}
type ('flow, 's) rdwr = {
rd : 'flow -> bytes -> int -> int -> ([ `End | `Len of int ], 's) io;
wr : 'flow -> string -> int -> int -> (unit, 's) io;
}
module type X = sig ... end