From 009527af27c8ee36a59db4d451e7c7a9896cb1da Mon Sep 17 00:00:00 2001
From: sof <unknown>
Date: Thu, 30 Apr 1998 19:50:18 +0000
Subject: [PATCH] [project @ 1998-04-30 19:50:18 by sof] showInt is only
 supposed to work on non-negative numbers

---
 ghc/lib/std/Numeric.lhs | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/ghc/lib/std/Numeric.lhs b/ghc/lib/std/Numeric.lhs
index 067c6728b1ae..919e832ff1d0 100644
--- a/ghc/lib/std/Numeric.lhs
+++ b/ghc/lib/std/Numeric.lhs
@@ -35,6 +35,7 @@ import PrelMaybe
 import PrelArr
 import PrelNum
 import PrelRead
+import PrelErr ( error )
 
 \end{code}
 
@@ -73,13 +74,17 @@ lexDigits      :: ReadS String
 \begin{code}
 showInt :: Integral a => a -> ShowS
 showInt n r
-  = case quotRem n 10 of                 { (n', d) ->
-    case chr (ord_0 + fromIntegral d) of { C# c# -> -- stricter than necessary
-    let
+  | n < 0     = error "Numeric.showInt: can't show negative numbers"
+  | otherwise = go n r
+    where
+     go n r = 
+      case quotRem n 10 of                 { (n', d) ->
+      case chr (ord_0 + fromIntegral d) of { C# c# -> -- stricter than necessary
+      let
 	r' = C# c# : r
-    in
-    if n' == 0 then r' else showInt n' r'
-    }}
+      in
+      if n' == 0 then r' else go n' r'
+      }}
 \end{code}
 
 Controlling the format and precision of floats. The code that
-- 
GitLab