Commit 450bac65 authored by rl@cse.unsw.edu.au's avatar rl@cse.unsw.edu.au
Browse files

Make sure zipWithFB has arity 2

It gets 2 arguments in the "zipWith" rule but its arity was higher and the new
inliner didn't inline it sometimes, for instance here:

mpp ::  [Double] -> [Double] -> [Double] -> [Double] -> [Double]
mpp as bs cs ds = zipWith (*) (zipWith (+) as bs) (zipWith (+) cs ds)
 
This was a regression vs. 6.10.
parent 78217b05
......@@ -680,9 +680,11 @@ zipWith :: (a->b->c) -> [a]->[b]->[c]
zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
zipWith _ _ _ = []
-- zipWithFB must have arity 2 since it gets two arguments in the "zipWith"
-- rule; it might not get inlined otherwise
{-# INLINE [0] zipWithFB #-}
zipWithFB :: (a -> b -> c) -> (d -> e -> a) -> d -> e -> b -> c
zipWithFB c f x y r = (x `f` y) `c` r
zipWithFB c f = \x y r -> (x `f` y) `c` r
{-# RULES
"zipWith" [~1] forall f xs ys. zipWith f xs ys = build (\c n -> foldr2 (zipWithFB c f) n xs ys)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment