Commit f251bf58 authored by Simon Peyton Jones's avatar Simon Peyton Jones

Make sum and product INLINABLE

This was causing the bad behaviour in Trac #7507,
because 'sum' wasn't getting specialised to Int64.

It also deals with Trac #4321, which had the same cause.

This has a big effect on some nofib programs too:

--------------------------------------------------------------------------------
        Program           Allocs   Runtime   Elapsed  TotalMem
------------------------------------------------------------------------
     bernouilli            -2.6%     -2.0%     -2.0%     +0.0%
           fft2           -23.8%      0.09      0.09    -16.7%
          fluid            -4.4%      0.01      0.01     +0.0%
         hidden            -3.2%     +2.1%     +1.8%     +0.0%
      integrate           -38.0%    -47.7%    -47.7%     -1.0%
           x2n1           -30.2%      0.01      0.01    -50.0%
------------------------------------------------------------------------
            Min           -38.0%    -47.7%    -47.7%    -50.0%
            Max            +0.4%    +11.2%    +11.8%     +6.9%
 Geometric Mean            -1.3%     +0.2%     +0.2%     -0.8%
parent 5d608279
...@@ -1033,8 +1033,13 @@ foldl1' _ [] = errorEmptyList "foldl1'" ...@@ -1033,8 +1033,13 @@ foldl1' _ [] = errorEmptyList "foldl1'"
{-# SPECIALISE sum :: [Int] -> Int #-} {-# SPECIALISE sum :: [Int] -> Int #-}
{-# SPECIALISE sum :: [Integer] -> Integer #-} {-# SPECIALISE sum :: [Integer] -> Integer #-}
{-# INLINABLE sum #-}
{-# SPECIALISE product :: [Int] -> Int #-} {-# SPECIALISE product :: [Int] -> Int #-}
{-# SPECIALISE product :: [Integer] -> Integer #-} {-# SPECIALISE product :: [Integer] -> Integer #-}
{-# INLINABLE product #-}
-- We make 'sum' and 'product' inlinable so that we get specialisations
-- at other types. See, for example, Trac #7507.
-- | The 'sum' function computes the sum of a finite list of numbers. -- | The 'sum' function computes the sum of a finite list of numbers.
sum :: (Num a) => [a] -> a sum :: (Num a) => [a] -> a
-- | The 'product' function computes the product of a finite list of numbers. -- | The 'product' function computes the product of a finite list of numbers.
......
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