[commit: base] master: Make sure testBit and bit get inlined; fixes #7292 (6fae60c)

Ian Lynagh igloo at earth.li
Thu Oct 25 20:42:04 CEST 2012


Repository : ssh://darcs.haskell.org//srv/darcs/packages/base

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/6fae60c48d13b4c3d8cbb3bf317b1af95d162924

>---------------------------------------------------------------

commit 6fae60c48d13b4c3d8cbb3bf317b1af95d162924
Author: Ian Lynagh <ian at well-typed.com>
Date:   Thu Oct 25 17:13:36 2012 +0100

    Make sure testBit and bit get inlined; fixes #7292

>---------------------------------------------------------------

 Data/Bits.hs |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/Data/Bits.hs b/Data/Bits.hs
index 5b1e1d4..abbadbd 100644
--- a/Data/Bits.hs
+++ b/Data/Bits.hs
@@ -252,18 +252,22 @@ class Eq a => Bits a where
 class Bits b => FiniteBits b where
     finiteBitSize :: b -> Int
 
+-- The defaults below are written with lambdas so that e.g.
+--     bit = bitDefault
+-- is fully applied, so inlining will happen
+
 -- | Default implementation for 'bit'.
 --
 -- Note that: @bitDefault i = 1 `shiftL` i@
 bitDefault :: (Bits a, Num a) => Int -> a
-bitDefault i = 1 `shiftL` i
+bitDefault = \i -> 1 `shiftL` i
 {-# INLINE bitDefault #-}
 
 -- | Default implementation for 'testBit'.
 --
 -- Note that: @testBitDefault x i = (x .&. bit i) /= 0@
 testBitDefault ::  (Bits a, Num a) => a -> Int -> Bool
-testBitDefault x i = (x .&. bit i) /= 0
+testBitDefault = \x i -> (x .&. bit i) /= 0
 {-# INLINE testBitDefault #-}
 
 -- | Default implementation for 'popCount'.





More information about the Cvs-libraries mailing list