Operador de medida de sobrecarga (*)

Estoy atascado intentando sobrecargar el operador (*) para un tipo de medida.

Lo que me gustaría ver es:

> let x = 1.0<i> * 1.0<i>;;

val x : float = -1.0

La siguiente definición parece hacer el truco:

> let inline (*) (v1 : float<i>) (v2 : float<i>) = float(-1) * float(v1) * float(v2);;

val inline ( * ) : float<i> -> float<i> -> float

Tenga en cuenta que la medida del producto en este ejemplo se resuelve correctamente en <1> como ocurre, por ejemplo, al multiplicar la unidad imaginaria de un número complejo. Sin esta definición de sobrecarga, el producto predeterminado se resuelve en <i ^ 2>.

Pero la definición de sobrecarga anterior tiene el desagradable efecto secundario que:

> let y = 1.0 * 1.0;;

let y = 1.0 * 1.0;;
--------^^^

stdin(11,9): error FS0001: This expression was expected to have type
float<i>    
but here has type
float

Aparentemente, mi definición de sobrecarga oculta el operador (*) para el tipo de flotador.

¿Qué estoy haciendo mal?

Respuestas a la pregunta(1)

Su respuesta a la pregunta