KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Why is the type of this function (a -> a) -> a? Prelude> let y f = f (y f) Prelude> :t y y :: (t -> t) -> t Shouldn't it be an infinite/recursive type? I was going to try and put into words what I think it's type should be, but I just can't do it for some reason. y :: (t -> t) -> ?WTFIsGoingOnOnTheRHS? I don't get how f (y f) resolves to a value. The following makes a little more sense to me: Prelude> let y f x = f (y f) x Prelude> :t y y :: ((a -> b) -> a -> b) -> a -> b But it's still ridiculously confusing. What's going on?
Tags (comma-separated)
Save Edits
Cancel