Pregunta

¿Por qué es el tipo de esta función (a -> a) -> a?

Prelude> let y f = f (y f)
Prelude> :t y
y :: (t -> t) -> t

¿No debería ser un tipo infinito/recursivo? Iba a tratar de expresar con palabras lo que creo que su tipo debería ser, pero no puedo hacerlo por alguna razón.

y :: (t -> t) -> ?WTFIsGoingOnOnTheRHS?

No entiendo cómo F (YF) se resuelve a un valor. Lo siguiente tiene un poco más de sentido para mí:

Prelude> let y f x = f (y f) x
Prelude> :t y
y :: ((a -> b) -> a -> b) -> a -> b

Pero todavía es ridículamente confuso. ¿Que esta pasando?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top