мне пока не попадалось
ghci> foldr (\(CotMD n ctM _) (mstep,pos) -> if ctM > mstep then (ctM, n) else (mstep, pos)) (0,0) $ take 10000000 listcot2
*** Exception: stack overflow
тут логическая ошибка бесконечной рекурсии. с логическими ошибками можно бороться отладкой и тестами. проверить сначала на маленьких данных
с маленькими работает, то есть если на 0 меньше таке, то все ок.... вопрос был конкретно про такую ошибку
о, это важное дополнение. важна не просто ошибка, а в каких условиях она проявляется
здесь слишком большая ленивая формула строится. отложите эту задачу до тех пор, пока не прочитаете главу про лень и строгость
можете дать данные (в личку), я проверю у себя, и если найду простое решение, то подскажу что-нибудьЮ
попробуй на foldl' заменить. не факт, конечно, но может сработать
проверил, это не бесконечная рекурсия, а слишком много задумок. можно расставить бэнги, например, data CotRes = CotRes !Int !Int !Int !Int
нет, так не сработало. всё равно память кончилась, но позже
Ещёб она не кончилась, у тебя в foldr шаг строгий
она и без этого кончается, только в другом месте
Ну потому что мемори лик в понял аккумулятора это не ленивый шаг. Шаг является ленивым в том случае, если его можно вычислить без вычисления хвоста.
действительно, foldl' помогла
https://github.com/hasura/graphql-engine/pull/2933#discussion_r328821960
Обсуждают сегодня