tipo implícito explícito ejemplos caracteristicas autor aprendizaje f# recursion type-systems

f# - implícito - aprendizaje explícito wikipedia



Recursividad de tipo explícito en F# (1)

Inspirado por esta pregunta :

¿Es posible la recursión de tipo explícito en F #?

type ''a Mu = In of ''a Mu ''a let unIn (In x) = x

Desafortunadamente, este código da "El parámetro Tipo no puede usarse como constructor de tipo.

Observaciones: Esta construcción se usa en el documento Programación funcional con sobrecarga y Polimorfismo de orden superior , por ejemplo.

Ejemplo de uso (tomado de aquí ):

type (''a, ''b) ListX = | Nil | Cons of ''a * ''b type ''a List = ListX Mu


No, esto no es posible Específicamente, los genéricos en F # tienen la misma limitación que el CLR, es decir, un <T> o un <''a> deben tener el tipo "*". Esta misma limitación es lo que significa que no puede escribir "clases de tipo" directamente en F #, ya que, por ejemplo, "Monad m" tomaría un argumento de mayor nivel "m" (por ejemplo, "* -> *", donde, por ejemplo, "lista" y "opción" ''podrían ser instancias, cada uno de ellos siendo constructores de tipo genérico), pero esto no está permitido.