Tipo de adición (+) en F #

Acabo de enterarme de que OCAML debe tener un. postfix para hacer aritmética flotante. Un ejemplo sería3. +. 4. que es igual a7. (flotante). Sin embargo, F # maneja la aritmética de flotante y entero de la misma manera, por lo que tanto3 + 4 (int) y3. + 4. (flotante) funciona.

F # have+ asignado naturalmente a int solet add a b = a + b es de tipoint -> int -> int. Y de hecho(+) me daval it : (int -> int -> int) = <fun:it@6-1>.

Eso lleva a la siguiente secuencia que creo que es bastante contra-intuitiva:

> 3. + 4.;;
val it : float = 7.0
> (+);;
val it : (int -> int -> int) = <fun:it@8-2>

Entonces mi pregunta es: ¿La "sobrecarga" se realiza mediante un mecanismo / caso especial en el compilador o es algo que abarca todo el lenguaje, por lo que potencialmente puedo definir una función llamadaadd (o cualquier otra cosa) que tenga una definición para enteros y otra para flotantes (o cualquier otro tipo).

Respuestas a la pregunta(3)

Su respuesta a la pregunta