Skip to content
Snippets Groups Projects
Commit 299f286e authored by Ian Lynagh's avatar Ian Lynagh
Browse files

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
parent fda76752
No related branches found
No related tags found
No related merge requests found
......@@ -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#
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment