Estoy tratando de averiguar cómo definir una función que funcione en múltiples tipos de parámetros (por ejemplo, int e int64). Según tengo entendido, la sobrecarga de funciones no es posible en F # (sin duda el compilador se queja). Tomemos por ejemplo la siguiente función.Funciones con los tipos de parámetros genéricos
let sqrt_int = function
| n:int -> int (sqrt (float n))
| n:int64 -> int64 (sqrt (float n))
El compilador, por supuesto, se queja de que la sintaxis no es válida (restricciones de tipo de coincidencia de patrones no son compatibles con lo que parece), aunque creo que esto ilustra lo que me gustaría lograr: una función que opera en varios tipos de parámetros y devuelve un valor del tipo correspondiente. Tengo la sensación de que esto es posible en F # usando una combinación de tipos genéricos/inferencia de tipo/coincidencia de patrones, pero la sintaxis me ha eludido. También he intentado usar el:? operador (pruebas de tipo dinámico) y cuando hace una cláusula en el bloque de coincidencia de patrones, pero esto todavía produce errores de todo tipo.
Como soy bastante nuevo en el lenguaje, es posible que esté tratando de hacer algo imposible aquí, por lo que le ruego me indique si hay una solución alternativa.
Buena aclaración - Creo que entiendo lo que está sucediendo ahora. Saludos por eso. Habiendo leído sobre las cosas, Parece que F # aún falta algunas de las características agradables idiomas funcionales como Haskell. Quizás estas características se implementarán pronto ahora que F # es un lenguaje de .NET de primera clase. – Noldorin
no estoy seguro de si quieres que esta sea una pregunta 'viviente' o no, pero dado que la versión actual de f # ya no necesita el OverloadId attrib (yey!) Es posible que desee ajustar la respuesta ... – ShuggyCoUk
Gracias, ya había actualizado el código, pero se olvidó de actualizar la prosa. – Brian