Ranjan Bagchi: > foo x (l,payload) = ((x:l), payload) > (x,_) = foldr foo ([], Nothing) [1..] > (take 10) x > > Doesn't terminate, until the stack overflows Try making the (l, payload) pattern match lazy: foo x ~(l, payload) = (x:l, payload)