В следующем обобщенном коде:
nat = [1..xmax]
xmax = *insert arbitrary Integral value here*
setA = [2*x | x <- nat]
setB = [3*x | x <- nat]
setC = [4*x | x <- nat]
setD = [5*x | x <- nat]
setOne = setA `f` setB
setTwo = setC `f` setD
setAll = setOne ++ setTwo
setAllSorted = quicksort setAll
(обратите внимание, что 'f' обозначает функцию типа
f :: Integral a => [a] -> [a] -> [a]
не просто ++)
как Haskell обрабатывает попытку вывести setAllSorted?
Получает ли он значения для setA и setB, вычисляет setOne и затем сохраняет в памяти только значения для setOne (перед вычислением всего остального)?
Или Haskell хранит все в памяти до получения значения для setAllSorted?
Если последнее, то как мне указать программе (используя функции main, do и прочие IO), чтобы она делала первое?
Могу ли я указать программе, в каком порядке вычислять и собирать мусор? Если да, то как мне это сделать?