The simple answer is to use a transparent signature constraint
structure Reals : Field
rather than an opaque constraint.
structure Reals :> Field
When you use an opaque constraint types such as field_type in the signature are created as new types distinct from the types that are used to implement them. If you want to retain the link to the original type you need to use a transparent constraint. With a transparent constraint Reals.field_type and real are the same type so you can use
ReF.add(0.0, 0.0);
perfectly well.
> ReF.add(0.0, 0.0);
val it = 0.0: real
As an alternative to using a transparent constraint, if you have other types in your signature that you want to be created as new types, you can still get the desired effect by using an opaque constraint along with where type.
structure Reals :> Field where type field_type = real