J'essaie de comprendre comment définir une fonction qui fonctionne sur plusieurs types de paramètres (par exemple int et int64). D'après ce que je comprends, la surcharge des fonctions n'est pas possible en F# (le compilateur s'en plaint certainement). Prenons par exemple la fonction suivante.
let sqrt_int = function
| n:int -> int (sqrt (float n))
| n:int64 -> int64 (sqrt (float n))
Le compilateur se plaint bien sûr que la syntaxe n'est pas valide (les contraintes de type dans la correspondance de motifs ne sont pas supportées, semble-t-il), mais je pense que cela illustre ce que je voudrais réaliser : une fonction qui opère sur plusieurs types de paramètres et renvoie une valeur du type correspondant. J'ai le sentiment que cela est possible en F# en utilisant une combinaison de types génériques, d'inférence de type et de correspondance de motifs, mais la syntaxe m'échappe. J'ai également essayé d'utiliser l'opérateur : ? (tests de type dynamiques) et la fonction quand dans le bloc de correspondance des motifs, mais cela produit encore toutes sortes d'erreurs.
Comme je suis plutôt novice dans la langue, il se peut que j'essaie de faire quelque chose d'impossible ici, alors faites-moi savoir s'il existe une solution alternative.