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
scroll top