ref: 15e2ba155a9f1b0260c7feceef0552b8e539b00c
parent: 2e92c0cfdb63109961ef9e3a00a5e12ca6670b1c
author: Lennart Augustsson <lennart@augustsson.net>
date: Fri Nov 3 05:20:39 EDT 2023
Add readInteger
--- a/lib/Data/Integer.hs
+++ b/lib/Data/Integer.hs
@@ -4,6 +4,7 @@
Integer,
intToInteger,
integerToInt,
+ readInteger,
_integerToIntList,
_intListToInteger,
) where
@@ -272,6 +273,9 @@
twoI :: Integer
twoI = I Plus [2]
+tenI :: Integer
+tenI = I Plus [10]
+
negOneI :: Integer
negOneI = I Minus [1]
@@ -287,6 +291,13 @@
showInteger' xs = showInteger' (trim0 xs') ++ [chr (ord '0' + d)]
where
(xs', [d]) = quotRemD xs 10
+
+readInteger :: String -> Integer
+readInteger ('-':ds) = negate (readUnsignedInteger ds)+readInteger ds = readUnsignedInteger ds
+
+readUnsignedInteger :: String -> Integer
+readUnsignedInteger = foldl (\ r c -> r * tenI + intToInteger (ord c - ord '0')) zeroI
eqI :: Integer -> Integer -> Bool
eqI (I sx xs) (I sy ys) = eqSign sx sy && eqList (==) xs ys
--
⑨