Меня немного смутила документация по fix
(хотя я думаю, что теперь понимаю, что он должен делать), поэтому я посмотрел исходный код. Это привело меня в еще большее замешательство:
fix :: (a -> a) -> a
fix f = let x = f x in x
Как именно это возвращает фиксированную точку?
Я решил попробовать это в командной строке:
Prelude Data.Function> fix id
...
И он там зависает. Честно говоря, это мой старый macbook, который работает медленно. Однако эта функция не может быть слишком вычислительно затратной, поскольку все, что передается в id, возвращает то же самое (не говоря уже о том, что это не потребляет процессорного времени). Что я делаю не так?