В Haskell следующий код выводит "[1,2,3,4,5":
foo = take 10 $ show $ numbersFrom 1 where
numbersFrom start = start : numbersFrom (start + 1) -- could use [1..]
Но у ФрегеОн выдает OutOfMemoryError
со следующим кодом:
foo = take 10 $ unpacked $ show $ numbersFrom 1 where
numbersFrom start = start : numbersFrom (start + 1)
Здесь единственное отличие состоит в функции unpacked
, которая необходима для преобразования из String
в [Char]
и FWIW, функция unpacked
стремится. Почему все выражение не может быть ленивым, как в Haskell? Можно ли здесь добиться чего-то похожего на Haskell во Фреге?