On 29 June 2014 15:49, Grégoire Henry <gregoire.henry@ocamlpro.com> wrote:
Your first example is a particular case where we could assume that
'W.a' and 'W.b' are distinct. They are 'fully abstract types', they
have no inhabitants. They were introduced in current typing context
(and not imported from the signature of another module) and we known
they are distinct.

This has bitten me before as well. It seems to me that whether or not a type is abstract and whether or not it has any values should be essentially independent characteristics, but it seems impossible to state in a signature that a type has no constructors. So there's this property of types that you can't preserve across module boundaries.