let sort (type s) [arity:2](module Set)  l = ()
let sort (type s) [arity:2]((module Set)  : (module Set.S with type elt = s))
  l = ()
let sort (type s)
  [arity:2]((module Set)  :
             (module Set.S with type elt = s and type elt2 = t))
  l = ()
let foo [arity:2](module Foo)  baz = Foo.bar baz
let bump_list (type a)
  [arity:2]((module B)  : (module Bumpable with type t = a)) (l : a list) =
  List.map ~f:(B.bump l)
;;match x with
  | (module Set)  -> ()
  | ((module Set)  : (module Set.S with type elt = s)) -> ()
  | ((module Set)  : (module Set.S with type elt = s and type elt2 = t)) ->
      ()