following Okasaki
type 'a sequence
= ('a ‑> unit) ‑> unit
type 'a gen
= unit ‑> 'a option
type 'a klist
= unit ‑> [ `Nil | `Cons of 'a * 'a klist ]
type 'a ktree
= unit ‑> [ `Nil | `Node of 'a * 'a ktree list ]
type 'a printer
= Format.formatter ‑> 'a ‑> unit
module type PARTIAL_ORD : sig ... end
module type S : sig ... end
module Make : functor (E : PARTIAL_ORD) -> S with type elt = E.t