foldl' :: (a -> b -> a) -> a -> [b] -> a foldl' f a [] = a foldl' f a (x:xs) = (foldl' f $! f a x) xs exG3 = printO (observe "foldl'" foldl' (+) 0 [1..4::Int])