foldl :: (a -> b -> a) -> a -> [b] -> a foldl f z [] = z foldl f z (x:xs) = foldl f (f z x) xs exG2 = printO (observe "foldl" foldl (+) 0 [1..4::Int])