In Haskell, all functions implicitly include ⊥ in their domain and codomain. If a function f
is strict in its argument, that means that f ⊥ = ⊥
; since fix f
is the least-defined fixpoint of f
and since ⊥
is the least-defined value, then strict functions have fix f = ⊥
.
On the other hand the lazy function f = const x
has fix f = x
.