Как использовать исправление и как оно работает?

Меня немного смутила документация по fix (хотя я думаю, что теперь понимаю, что он должен делать), поэтому я посмотрел исходный код. Это привело меня в еще большее замешательство:

fix :: (a -> a) -> a
fix f = let x = f x in x

Как именно это возвращает фиксированную точку?

Я решил попробовать это в командной строке:

Prelude Data.Function> fix id
...

И он там зависает. Честно говоря, это мой старый macbook, который работает медленно. Однако эта функция не может быть слишком вычислительно затратной, поскольку все, что передается в id, возвращает то же самое (не говоря уже о том, что это не потребляет процессорного времени). Что я делаю не так?

82
задан duplode 15 July 2019 в 05:05
поделиться