W poniższym kodzie uogólnionej:Domyślny sposób wykonywania kodu w Haskell
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
(należy pamiętać, że „f” oznacza funkcję typu
f :: Integral a => [a] -> [a] -> [a]
że nie jest to po prostu ++)
W jaki sposób uchwyt Haskell próbuje wydrukować zestawAllSortowane?
czy otrzyma wartości dla setA i setB, obliczyć setOne, a następnie zachować tylko wartości setOne w pamięci (przed obliczeniem wszystkiego innego)?
Czy Haskell zachowuje wszystko w pamięci, dopóki nie uzyska wartości dla setAllSorted?
Jeśli to drugie ma miejsce, to jak określiłbym (używając funkcji main, do i wszystkich innych rzeczy IO), czy zamiast tego robi to pierwsze?
Czy mogę powiedzieć programowi, w jakiej kolejności obliczyć i zebrać śmieci? Jeśli tak, to jak mam to zrobić?
Haskell nie definiuje, w jaki sposób twój kod jest w ogóle wykonywany, tylko jaki musi być wynik; to pytanie jest z natury ściśle związane z wdrażaniem. – ehird