Funziona con tipi di parametri generici

Sto cercando di capire come definire una funzione che funzioni su più tipi di parametri (ad es. Int e int64). A quanto ho capito, l’overloading delle funzioni non è ansible in F # (certamente il compilatore si lamenta). Prendi ad esempio la seguente funzione.

let sqrt_int = function | n:int -> int (sqrt (float n)) | n:int64 -> int64 (sqrt (float n)) 

Il compilatore ovviamente lamenta che la syntax non è valida (sembra che i vincoli di tipo nella corrispondenza dei pattern non siano supportati sembra), anche se penso che questo illustri cosa mi piacerebbe ottenere: una funzione che opera su diversi tipi di parametri e restituisce un valore di genere. Ho la sensazione che questo sia ansible in F # usando una combinazione di tipi generici / tipo di inferenza / pattern matching, ma la syntax mi ha eluso. Ho anche provato a usare il:? operatore (test di tipo dinamico) e quando le clausole nel blocco di corrispondenza del modello, ma questo produce ancora tutti gli errori di sorta.

Dato che sono piuttosto nuovo nella lingua, potrei benissimo provare a fare qualcosa di imansible qui, quindi per favore fatemi sapere se esiste una soluzione alternativa.