Tipo de adição (+) em F #

Acabei de saber que a OCAML precisa ter um. postfix para fazer aritmética de flutuação. Um exemplo seria3. +. 4. que é igual a7. (flutuante). No entanto, o F # manipula aritmética float e número inteiro da mesma maneira, portanto,3 + 4 (int) e3. + 4. (flutuante) funcion

F # tem+ naturalmente atribuído a int solet add a b = a + b é do tipoint -> int -> int. E realmente(+) me dával it : (int -> int -> int) = <fun:it@6-1>.

Isso leva à seguinte sequência, que eu acho bastante contra-intuitiva:

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

Então minha pergunta é: A "sobrecarga" é feita por um mecanismo / caso especial no compilador ou é uma coisa em toda a linguagem, para que eu possa definir uma função chamadaadd (ou qualquer outra coisa) que possua uma definição para números inteiros e outra para flutuadores (ou qualquer outro tipo

questionAnswers(3)

yourAnswerToTheQuestion