newtype Fix a = Fix (a (Fix a))
newtype Flip a b c = Flip (a c b)

y :: (a -> a) -> a
y = (>>=) (Fix . Flip) (flip id) . (>>=) (\ (Fix (Flip x)) -> x) . (.)