Add shiftR and shiftL implementations to instance Bits Integer
authorSimon Peyton Jones <simonpj@microsoft.com>
Thu, 13 Mar 2014 12:11:01 +0000 (12:11 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Thu, 13 Mar 2014 12:11:01 +0000 (12:11 +0000)
Apart from simply making sense (avoid the conditional in 'shift'),
this makes left and right shifts on Integer more likely to inline
(plain 'shift' is just too large); and this in turn is important
when fixing the Integer case of #8832

Data/Bits.hs

index 28cd024..81b180b 100644 (file)
@@ -437,6 +437,9 @@ instance Bits Integer where
    complement = complementInteger
    shift x i@(I# i#) | i >= 0    = shiftLInteger x i#
                      | otherwise = shiftRInteger x (negateInt# i#)
+   shiftL x (I# i#) = shiftLInteger x i#
+   shiftR x (I# i#) = shiftRInteger x i#
+
    testBit x (I# i) = testBitInteger x i
 
    zeroBits   = 0