type 'a t = 'a -> unit
type 'a inv = 'a t
module type S1 = sig .. end
type 'a t
val invariant : 'a inv -> 'a t inv
module type S2 = sig .. end
type ('a, 'b) t
val invariant : 'a inv -> 'b inv -> ('a, 'b) t inv
module type S3 = sig .. end
type ('a, 'b, 'c) t
val invariant : 'a inv -> 'b inv -> 'c inv -> ('a, 'b, 'c) t inv