Выражение нетерпеливого во Фреге, но ленивого в Хаскеле?

В 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 во Фреге?

6
задан Marimuthu Madasamy 15 August 2012 в 01:00
поделиться