Perché il tipo di questa funzione (a -> a) -> a?
-
30-10-2019 - |
Domanda
Perché il tipo di questa funzione (a -> a) -> a?
Prelude> let y f = f (y f)
Prelude> :t y
y :: (t -> t) -> t
Non dovrebbe essere un tipo infinito/ricorsivo? Stavo per provare a esprimere a parole quello che penso dovrebbe essere, ma non posso farlo per qualche motivo.
y :: (t -> t) -> ?WTFIsGoingOnOnTheRHS?
Non capisco come F (YF) si risolve a un valore. Quanto segue ha un po 'più senso per me:
Prelude> let y f x = f (y f) x
Prelude> :t y
y :: ((a -> b) -> a -> b) -> a -> b
Ma è ancora ridicolmente confuso. Cosa sta succedendo?
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow