Haskell + Data.Array + foldr = Stack space overflow
От: SolVolkov  
Дата: 14.11.09 13:55
Оценка:
Привет,

Возникла проблема с массивами в haskell

Имею следующий код (ужатый и выхолощенный до минимума, всё ещё содерщего проблему, так что смысла в нём прошу не искать )


module Main
where

import Data.Array
import Data.Foldable

main :: IO ()
main = print (res arr)

res :: Array Int Int
--res a = Prelude.foldl (+) 0 (elems a)
res = Data.Foldable.foldl (+) 0

arr :: Array Int Int
arr = listArray (0, 100000) (repeat 42)


В таком виде код приводит к

Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize' to increase it.


Видимо, рекурсия, не сводимая к хвостовой. Но если поменять определение res на закоментированное, то код отрабатывает успешно.
Вопрос: откуда рекурсия в Data.Foldable.foldl?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.