ref: e8663ea3ec8cebe946fa125c8e03fcb000a87334
parent: 6227f227f0d19b5e1fa75d51df18ea26211f14ed
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Mon Dec 18 09:47:06 EST 2023
Add foldl' and foldr'
--- a/lib/Data/List.hs
+++ b/lib/Data/List.hs
@@ -86,6 +86,12 @@
rec (x : xs) = f x (rec xs)
in rec
+foldr' :: forall a b . (a -> b -> b) -> b -> [a] -> b
+foldr' f z [] = z
+foldr' f z (x:xs) =
+ let y = foldr f z xs
+ in y `seq` f x y
+
foldr1 :: forall a . (a -> a -> a) -> [a] -> a
foldr1 _ [] = error "foldr1"
foldr1 f (x : xs) = foldr f x xs
@@ -93,6 +99,12 @@
foldl :: forall a b . (b -> a -> b) -> b -> [a] -> b
foldl _ z [] = z
foldl f z (x : xs) = foldl f (f z x) xs
+
+foldl' :: forall a b . (b -> a -> b) -> b -> [a] -> b
+foldl' _ z [] = z
+foldl' f z (x : xs) =
+ let y = f z x
+ in y `seq` foldl f y xs
foldl1 :: forall a . (a -> a -> a) -> [a] -> a
foldl1 _ [] = error "foldl1"
--
⑨