Можете ли вы объяснить, как все это работает?
fix2 - это y-комбинатор (в частности, это комбинатор для функций с двумя аргументами; первый аргумент - это функция (с целью рекурсии), второй аргумент - «правильный» аргумент функции). Создает рекурсивные функции.
bll :: ret (...), кажется, создает некоторую форму функционального объекта, тело которого является
if(second arg == 0)
{
return 1;
}
else
{
return second arg * first arg(second arg - 1);
}
Предполагается, что «ленивый» останавливает бесконечное расширение первого (функционального) аргумента (читайте о разнице между ленивыми и строгими y-комбинаторами, чтобы понять почему).
Код довольно ужасный. Приятно иметь анонимные функции, но из-за отсутствия синтаксической поддержки в C ++ они не стоят усилий.