[project @ 1998-01-30 16:57:33 by sof]
authorsof <unknown>
Fri, 30 Jan 1998 16:57:40 +0000 (16:57 +0000)
committersof <unknown>
Fri, 30 Jan 1998 16:57:40 +0000 (16:57 +0000)
- NumExts: new hugs&ghc interface
- moved showOct and showHex from Numeric to NumExts

ghc/lib/glaExts/NumExts.lhs [new file with mode: 0644]
ghc/lib/required/Numeric.lhs

diff --git a/ghc/lib/glaExts/NumExts.lhs b/ghc/lib/glaExts/NumExts.lhs
new file mode 100644 (file)
index 0000000..e2f053a
--- /dev/null
@@ -0,0 +1,55 @@
+%
+% (c) The AQUA Project, Glasgow University, 1998
+%
+
+\section[NumExts]{Misc numeric bits}
+
+\begin{code}
+module NumExts
+
+       (
+         doubleToFloat   -- :: Double -> Float
+       , floatToDouble   -- :: Double -> Float
+       , showHex         -- :: Integral a => a -> ShowS
+       , showOct         -- :: Integral a => a -> ShowS
+       ) where
+
+import Char (ord, chr)
+import PrelBase (ord_0)
+import GlaExts
+\end{code}
+
+\begin{code}
+doubleToFloat :: Double -> Float
+doubleToFloat (D# d#) = F# (double2Float# d#)
+
+floatToDouble :: Float -> Double
+floatToDouble (F# f#) = D# (float2Double# f#)
+
+showIntAtBase :: Integral a => a -> (a -> Char) -> a -> ShowS
+showIntAtBase base toChr n r
+  | n < 0  = error ("NumExts.showIntAtBase: applied to negative number " ++ show n)
+  | otherwise = 
+    case quotRem n base of { (n', d) ->
+    case toChr d        of { C# c# -> -- stricter than necessary
+    let
+       r' = C# c# : r
+    in
+    if n' == 0 then r' else showIntAtBase base toChr n' r'
+    }}
+
+showHex :: Integral a => a -> ShowS
+showHex n r = 
+ showString "0x" $
+ showIntAtBase 16 (toChrHex) n r
+ where  
+  toChrHex d
+    | d < 10    = chr (ord_0   + fromIntegral d)
+    | otherwise = chr (ord 'a' + fromIntegral (d - 10))
+
+showOct :: Integral a => a -> ShowS
+showOct n r = 
+ showString "0o" $
+ showIntAtBase 8 (toChrOct) n r
+ where toChrOct d = chr (ord_0   + fromIntegral d)
+\end{code}
index e6c3f0e..4226863 100644 (file)
@@ -18,7 +18,6 @@ module Numeric
         readInt,
 
         readDec, readOct, readHex,
-         showDec, showOct, showHex,
 
         showEFloat, 
         showFFloat, 
@@ -82,37 +81,6 @@ showInt n r
     if n' == 0 then r' else showInt n' r'
     }}
 
-showIntAtBase :: Integral a => a -> (a -> Char) -> a -> ShowS
-showIntAtBase base toChr n r
-  = case quotRem n base of { (n', d) ->
-    case toChr d        of { C# c# -> -- stricter than necessary
-    let
-       r' = C# c# : r
-    in
-    if n' == 0 then r' else showIntAtBase base toChr n' r'
-    }}
-
-showDec :: Integral a => a -> ShowS
-showDec n r = 
- showIntAtBase 10 
-               (\ d -> chr (ord_0 + fromIntegral d)) 
-              n r
-
-showHex :: Integral a => a -> ShowS
-showHex n r = 
- showString "0x" $
- showIntAtBase 16 (toChrHex) n r
- where  
-  toChrHex d
-    | d < 10    = chr (ord_0   + fromIntegral d)
-    | otherwise = chr (ord 'a' + fromIntegral (d - 10))
-
-showOct :: Integral a => a -> ShowS
-showOct n r = 
- showString "0o" $
- showIntAtBase 8 (toChrOct) n r
- where toChrOct d = chr (ord_0   + fromIntegral d)
-
 \end{code}
 
 Controlling the format and precision of floats. The code that