Pourquoi le type de cette fonction (a -> a) -> a?
-
30-10-2019 - |
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