Funnily enough you can't actually implement the proper y-combinator in Haskell because the type system won't allow it. Which is a real shame because in most Lisps you can only implement the applicative order y-combinator due to a lack of lazy evaluation.
What is "improper" about this implementation in Haskel?
fix :: (a -> a) -> a
fix f = let x = f x in x
The y combinator is used to implement recursion in a language without recursion no?
That definition is dependent on recursion already being present.