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.