Я определил бесконечный список бесконечных списков pathCounts и бесконечный список конечных списков pathCounts':
import Data.Function (fix)
nextRow xs = fix $ \ys -> zipWith (+) xs (0:ys)
pathCounts = repeat 1 : map nextRow pathCounts
pathCounts' = map (take 100) pathCounts
Отбрасывание в ghci, если я вообще не оценил, я могу использовать :p либо успешно:
ghci> :p pathCounts
pathCounts = (_t1::[[Integer]])
ghci> :p pathCounts'
pathCounts' = (_t2::[[Integer]])
Но если я частично оцениваю pathCounts', то :p зависает на pathCounts, но все же преуспевает pathCounts':
ghci> head . head $ pathCounts'
1
ghci> :p pathCounts'
pathCounts' = (1 : (_t4::[Integer])) : (_t5::[[Integer]])
ghci> :p pathCounts
^CInterrupted.
Я бы ожидал, что :p pathCounts напечатает то же самое, что и :p pathCounts', поскольку я только частично его оценил. Почему он не работает?