diff options
author | Joachim Breitner <mail@joachim-breitner.de> | 2015-09-28 13:48:40 +0200 |
---|---|---|
committer | Joachim Breitner <mail@joachim-breitner.de> | 2015-09-28 13:48:40 +0200 |
commit | 78053f449d47a90c977ec3a893524f2cdb5d33f9 (patch) | |
tree | dde0cd0463e93eb49a52e911ec19a60f922d80bc /libraries/base/GHC/Enum.hs | |
parent | b4d43b4e9f4f4fba068ab1e132113c4cd305dfe3 (diff) | |
download | haskell-78053f449d47a90c977ec3a893524f2cdb5d33f9.tar.gz |
Allow enumDeltaIntegerFB to be inlined
The function is very small and the compiler should be at liberty to
inline it. But it is recursive, so it did not do it before. By applying
the usual transformation with a local recursive function, GHC can now
inline it, producing the loop that one would expect.
Diffstat (limited to 'libraries/base/GHC/Enum.hs')
-rw-r--r-- | libraries/base/GHC/Enum.hs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libraries/base/GHC/Enum.hs b/libraries/base/GHC/Enum.hs index a11d4f8ccf..0d91cc7cbc 100644 --- a/libraries/base/GHC/Enum.hs +++ b/libraries/base/GHC/Enum.hs @@ -704,7 +704,8 @@ the special case varies more from the general case, due to the issue of overflow {-# NOINLINE [0] enumDeltaIntegerFB #-} enumDeltaIntegerFB :: (Integer -> b -> b) -> Integer -> Integer -> b -enumDeltaIntegerFB c x d = x `seq` (x `c` enumDeltaIntegerFB c (x+d) d) +enumDeltaIntegerFB c x d = go x + where go x = x `seq` (x `c` go (x+d)) {-# NOINLINE [1] enumDeltaInteger #-} enumDeltaInteger :: Integer -> Integer -> [Integer] |