As previously discussed, parameterized signatures would cut down on typical where type boilerplate. Given that we already have type constructors and functors it would actually be less surprising to users that signatures could also be parameterized.
Signature members would take us most of the way (e.g. functor MkSig (M: sig type t end) :> sig signature S = sig type t = M.t end end = ... and signature SIG = MkSig(type t = int).S but such encodings are still annoying.
As previously discussed, parameterized signatures would cut down on typical
where typeboilerplate. Given that we already have type constructors and functors it would actually be less surprising to users that signatures could also be parameterized.Signature members would take us most of the way (e.g.
functor MkSig (M: sig type t end) :> sig signature S = sig type t = M.t end end = ...andsignature SIG = MkSig(type t = int).Sbut such encodings are still annoying.