Sono nuovo di F # e sono stato sorpreso di scoprire che il tipo di f x y = x + y
è in realtà int -> int -> int
. Appearently, questo è dovuto ad alcuni compromessi in termini di prestazioni.Perché il tipo di argomento degli operatori aritmetici è impostato su int?
Ma perché è effettivamente necessario? Perché non solo dedurre il tipo di essere 'a -> 'a -> 'a
o qualcosa di simile? Sembra funzionare per il confronto: il tipo di g x y = x < y
è x:'a -> y:'a -> bool when 'a : comparison
. Perché non anche per gli operatori aritmetici?
Non è possibile che il compilatore deduca staticamente i tipi primitivi specifici dai siti di chiamata e specializzi la funzione generica da lì, ricadendo in qualche dispatch dinamico se questo non riesce?
Questo potrebbe essere molto ovvio, ma non ho trovato alcuna buona risorsa in questo. Qual è il ragionamento dietro questo comportamento?
Grazie per questa risposta rapida ed eccellente. "in .NET non è possibile utilizzare i vincoli dei membri" <- questo è quello che non avevo realizzato. Non so perché, ma in qualche modo ho pensato che fosse possibile. Probabilmente dovrei RTFM prima di fare altre domande;) – user4235730