shithub: MicroHs

Download patch

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
--