Question

Pourquoi le type de cette fonction (a -> a) -> a?

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

Ne devrait-il pas être un type infini / récursif? J'allais essayer de mettre en mots ce que je pense que c'est le type, mais je ne peux pas le faire pour une raison quelconque.

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

Je n'obtiens pas comment F (yf) résout une valeur. Ce qui suit a un peu plus de sens pour moi:

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

Mais c'est toujours ridiculement déroutant. Que se passe-t-il?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top