Задачка из SICP по вычислению числа pi с заданной точностью. Как-то странно ведет себя такой код на Haskell, такое впечатление будто хвостовая рекурсия не используется:
prod term a step b = prod' 1 a where
prod' res curr | curr > b = res
| otherwise = prod' (res * term curr) (step curr)
getPi acc = 8 * (prod (\x -> (x+1)/x) 3 (+2) (2*acc+1))^2 / (2*acc+2)
GHC говорит про переполнение стека при вызове getPi 1000000. Аналогичный код на Scheme ведет себя так как надо, разворачивая вычисления в цикл (судя по дебагу).
Пробовал реализовывать prod через foldl, та же самая фигня. В какую сторону копать?