ICFP and improvement of module language

Really ? That sounds horrible.

What’s wrong with defining

module type Myexpectation = sig
  include Ordered 
  include Printable with type t := t
end

And then using:

let foo (module A : Myexpectation) (x : A.t) = ...

I don’t think it’s that bad in practice. E.g. see here and usage here for examples.