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