Well, to ensure the coherence of the with constraints, we require that
the new signature be a subtype of the original one (as a module, not as an object).
This is where your code gets rejected.

Now why is it deemed unsafe to allow a constrained type definition to be a subtype of
an unconstrained one?
Actually, I don't know.
The unconstrained type does not enforce the invariants of the constrained one,
but they will be checked as soon as you try to unify the two.
So it may be possible to lift this restriction.
 
It sounds pretty unlikely. If I have a functor taking a T in argument and I pass it a T with constraints, it's likely to be inconsistent.

May I wonder, though, about the reason why T with blah should be a subtype of T? I must confess I fail to see the point.


Arnaud