Make foldlStrict semantics to match foldl'.
authorMilan Straka <fox@ucw.cz>
Fri, 22 Oct 2010 10:09:39 +0000 (10:09 +0000)
committerMilan Straka <fox@ucw.cz>
Fri, 22 Oct 2010 10:09:39 +0000 (10:09 +0000)
Data/IntMap.hs
Data/IntSet.hs
Data/Map.hs
Data/Set.hs

index 4c9c779..c76f763 100644 (file)
@@ -1855,9 +1855,8 @@ highestBitMask x0
 --------------------------------------------------------------------}
 
 foldlStrict :: (a -> b -> a) -> a -> [b] -> a
-foldlStrict = go
+foldlStrict = go
   where
-    STRICT23(go)
-    go f z []     = z
-    go f z (x:xs) = go f (f z x) xs
+    go z []     = z
+    go z (x:xs) = let z' = f z x in z' `seq` go z' xs
 {-# INLINE foldlStrict #-}
index 1c839f2..da5153c 100644 (file)
@@ -994,9 +994,8 @@ highestBitMask x0
   Utilities 
 --------------------------------------------------------------------}
 foldlStrict :: (a -> b -> a) -> a -> [b] -> a
-foldlStrict = go
+foldlStrict = go
   where
-    STRICT23(go)
-    go f z []     = z
-    go f z (x:xs) = go f (f z x) xs
+    go z []     = z
+    go z (x:xs) = let z' = f z x in z' `seq` go z' xs
 {-# INLINE foldlStrict #-}
index bec9893..f739f5e 100644 (file)
@@ -2560,9 +2560,8 @@ validsize t
   Utilities
 --------------------------------------------------------------------}
 foldlStrict :: (a -> b -> a) -> a -> [b] -> a
-foldlStrict = go
+foldlStrict = go
   where
-    STRICT23(go)
-    go f z []     = z
-    go f z (x:xs) = go f (f z x) xs
+    go z []     = z
+    go z (x:xs) = let z' = f z x in z' `seq` go z' xs
 {-# INLINE foldlStrict #-}
index 5bd72f0..f17971d 100644 (file)
@@ -1061,11 +1061,10 @@ bin x l r
   Utilities
 --------------------------------------------------------------------}
 foldlStrict :: (a -> b -> a) -> a -> [b] -> a
-foldlStrict = go
+foldlStrict = go
   where
-    STRICT23(go)
-    go f z []     = z
-    go f z (x:xs) = go f (f z x) xs
+    go z []     = z
+    go z (x:xs) = let z' = f z x in z' `seq` go z' xs
 {-# INLINE foldlStrict #-}
 
 {--------------------------------------------------------------------