[commit: integer-gmp] ghc-7.4: Add some rules; fixes #5767 (ede8a0b)
Ian Lynagh
igloo at earth.li
Thu Jan 26 15:42:43 CET 2012
Repository : ssh://darcs.haskell.org//srv/darcs/packages/integer-gmp
On branch : ghc-7.4
http://hackage.haskell.org/trac/ghc/changeset/ede8a0bdd899913b4da80d38b98a846ef040263d
>---------------------------------------------------------------
commit ede8a0bdd899913b4da80d38b98a846ef040263d
Author: Ian Lynagh <igloo at earth.li>
Date: Thu Jan 26 13:58:04 2012 +0000
Add some rules; fixes #5767
We now have rules for
integerToInt (smallInteger x) = x
integerToWord (wordToInteger x) = x
integerToInt64 (int64ToInteger x) = x
integerToWord64 (word64ToInteger x) = x
>---------------------------------------------------------------
GHC/Integer/Type.lhs | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/GHC/Integer/Type.lhs b/GHC/Integer/Type.lhs
index 401544d..94bd4dd 100644
--- a/GHC/Integer/Type.lhs
+++ b/GHC/Integer/Type.lhs
@@ -90,6 +90,11 @@ smallInteger i = S# i
wordToInteger :: Word# -> Integer
wordToInteger w = case word2Integer# w of (# s, d #) -> J# s d
+{-# RULES
+"integerToInt/smallInteger" forall x . integerToInt (smallInteger x) = x
+"integerToWord/wordToInteger" forall x . integerToWord (wordToInteger x) = x
+ #-}
+
{-# NOINLINE integerToWord #-}
integerToWord :: Integer -> Word#
integerToWord (S# i) = int2Word# i
@@ -120,6 +125,11 @@ int64ToInteger i = if ((i `leInt64#` intToInt64# 0x7FFFFFFF#) &&
then smallInteger (int64ToInt# i)
else case int64ToInteger# i of
(# s, d #) -> J# s d
+
+{-# RULES
+"integerToInt64/int64ToInteger" forall x . integerToInt64 (int64ToInteger x) = x
+"integerToWord64/word64ToInteger" forall x . integerToWord64 (word64ToInteger x) = x
+ #-}
#endif
integerToInt :: Integer -> Int#
More information about the Cvs-libraries
mailing list