[commit: integer-simple] master: Define mkInteger (9d7337a)
Ian Lynagh
igloo at earth.li
Sun Sep 18 16:55:26 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/integer-simple
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/9d7337a376831ffa84aa98564ee3c6e670de2f34
>---------------------------------------------------------------
commit 9d7337a376831ffa84aa98564ee3c6e670de2f34
Author: Ian Lynagh <igloo at earth.li>
Date: Sat Sep 17 19:45:44 2011 +0100
Define mkInteger
Now used by GHC to generate Integer literals.
>---------------------------------------------------------------
GHC/Integer.hs | 2 +-
GHC/Integer/Type.hs | 10 ++++++++++
2 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/GHC/Integer.hs b/GHC/Integer.hs
index 66e35c9..c9b50a7 100644
--- a/GHC/Integer.hs
+++ b/GHC/Integer.hs
@@ -18,7 +18,7 @@
#include "MachDeps.h"
module GHC.Integer (
- Integer,
+ Integer, mkInteger,
smallInteger, wordToInteger, integerToWord, integerToInt,
#if WORD_SIZE_IN_BITS < 64
integerToWord64, word64ToInteger,
diff --git a/GHC/Integer/Type.hs b/GHC/Integer/Type.hs
index 7d1a90e..02eeef2 100644
--- a/GHC/Integer/Type.hs
+++ b/GHC/Integer/Type.hs
@@ -51,6 +51,16 @@ type Digit = Word#
-- XXX Could move [] above us
data List a = Nil | Cons a (List a)
+mkInteger :: Bool -- non-negative?
+ -> [Int] -- absolute value in 31 bit chunks, least significant first
+ -- ideally these would be Words rather than Ints, but
+ -- we don't have Word available at the moment.
+ -> Integer
+mkInteger nonNegative is = let abs = f is
+ in if nonNegative then abs else negateInteger abs
+ where f [] = Naught
+ f (I# i : is') = smallInteger i `orInteger` shiftLInteger (f is') 31#
+
errorInteger :: Integer
errorInteger = Positive errorPositive
More information about the Cvs-libraries
mailing list