At first glance, the fix function may appear odd and useless . However, there is a theoretical reason for its existence: introducing it into the (typed) lambda calculus as a primitive allows you to define recursive functions. fix is simply defined as: fix :: (a -> a) -> a fix f = let {x = f x} in x Doesn't that seem ... magical? You might be wondering: surely fix f will cause an infinite series of