# [MLton] flexible types

**Stephen Weeks
**
MLton@mlton.org

*Wed, 11 Feb 2004 14:25:30 -0800*

>* SML/NJ rejects this program, claiming that u is a definitional spec and
*>* can't be redefined.
*
This is a bug in SML/NJ.
>* MLton accepts it; are flexible types in signatures
*>* really transitive in this manner? (i.e., t is definitely flexible, and
*>* can be "where type" constrained, but does that mean u can be as well?)
*>*
*>* signature S =
*>* sig
*>* datatype t = A | B | C
*>* type u = t
*>* end
*>*
*>* signature R =
*>* sig
*>* structure S : S
*>* end
*>*
*>* signature P =
*>* sig
*>* structure S : S
*>* structure R : R where type S.u = S.u
*>* end
*
Once you have "type u = t", then both t and u denote the same flexible
tycon, so "where S.u = S.u" is exactly the same as "where S.t = S.u",
i.e. they both define the same flexible tycon.