summaryrefslogtreecommitdiff
path: root/compiler/GHC/Utils/Misc.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Utils/Misc.hs')
-rw-r--r--compiler/GHC/Utils/Misc.hs23
1 files changed, 17 insertions, 6 deletions
diff --git a/compiler/GHC/Utils/Misc.hs b/compiler/GHC/Utils/Misc.hs
index 05e8365745..fbf52d1bdb 100644
--- a/compiler/GHC/Utils/Misc.hs
+++ b/compiler/GHC/Utils/Misc.hs
@@ -79,7 +79,7 @@ module GHC.Utils.Misc (
transitiveClosure,
-- * Strictness
- seqList, strictMap, strictZipWith,
+ seqList, strictMap, strictZipWith, strictZipWith3,
-- * Module names
looksLikeModuleName,
@@ -991,8 +991,8 @@ seqList [] b = b
seqList (x:xs) b = x `seq` seqList xs b
strictMap :: (a -> b) -> [a] -> [b]
-strictMap _ [] = []
-strictMap f (x : xs) =
+strictMap _ [] = []
+strictMap f (x:xs) =
let
!x' = f x
!xs' = strictMap f xs
@@ -1000,15 +1000,26 @@ strictMap f (x : xs) =
x' : xs'
strictZipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
-strictZipWith _ [] _ = []
-strictZipWith _ _ [] = []
-strictZipWith f (x : xs) (y: ys) =
+strictZipWith _ [] _ = []
+strictZipWith _ _ [] = []
+strictZipWith f (x:xs) (y:ys) =
let
!x' = f x y
!xs' = strictZipWith f xs ys
in
x' : xs'
+strictZipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
+strictZipWith3 _ [] _ _ = []
+strictZipWith3 _ _ [] _ = []
+strictZipWith3 _ _ _ [] = []
+strictZipWith3 f (x:xs) (y:ys) (z:zs) =
+ let
+ !x' = f x y z
+ !xs' = strictZipWith3 f xs ys zs
+ in
+ x' : xs'
+
-- Module names: