type foo = < foo:int > type bar = < bar:int > type k = < foo; bar > type u = < k; baz:int > let f (x: <u; ..>) (\* the type annotation is not needed \*) = x#m
Actually getting values out of such a module-typed structure does involve some ceremony, however:
let f = let module M = (val my_foobar) in M.foo