Skip to content
Snippets Groups Projects
Commit ab5a9b60 authored by sof's avatar sof
Browse files

[project @ 1997-05-18 04:04:30 by sof]

parent fae5e3bf
No related branches found
No related tags found
No related merge requests found
%
% (c) The AQUA Project, Glasgow University, 1997
%
\section[Numeric]{Numeric interface}
Odds and ends, mostly functions for reading and showing
\tr{RealFloat}-like kind of values.
\begin{code}
{-# OPTIONS -fno-implicit-prelude #-}
module Numeric
(
fromRat,
showSigned,
readSigned,
showInt,
readInt,
readDec, readOct, readHex,
showDec, showOct, showHex,
showEFloat,
showFFloat,
showGFloat,
showFloat,
readFloat,
floatToDigits,
lexDigits
) where
import PrelBase
import ArrBase
import PrelNum
import PrelRead
\end{code}
%*********************************************************
%* *
\subsection{Signatures}
%* *
%*********************************************************
Interface on offer:
\begin{pseudocode}
fromRat :: (RealFloat a) => Rational -> a
showSigned :: (Real a) => (a -> ShowS) -> Int -> a -> ShowS
readSigned :: (Real a) => ReadS a -> ReadS a
showInt :: Integral a => a -> ShowS
readInt :: (Integral a) => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
readDec :: (Integral a) => ReadS a
readOct :: (Integral a) => ReadS a
readHex :: (Integral a) => ReadS a
showEFloat :: (RealFloat a) => Maybe Int -> a -> ShowS
showFFloat :: (RealFloat a) => Maybe Int -> a -> ShowS
showGFloat :: (RealFloat a) => Maybe Int -> a -> ShowS
showFloat :: (RealFloat a) => a -> ShowS
readFloat :: (RealFloat a) => ReadS a
floatToDigits :: (RealFloat a) => Integer -> a -> ([Int], Int)
lexDigits :: ReadS String
\end{pseudocode}
\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
r' = C# c# : r
in
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 =
if d < 10 then
chr (ord_0 + fromIntegral d)
else
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}
\begin{code}
showEFloat :: (RealFloat a) => Maybe Int -> a -> ShowS
showFFloat :: (RealFloat a) => Maybe Int -> a -> ShowS
showGFloat :: (RealFloat a) => Maybe Int -> a -> ShowS
showEFloat d x = showString (formatRealFloat FFExponent d x)
showFFloat d x = showString (formatRealFloat FFFixed d x)
showGFloat d x = showString (formatRealFloat FFGeneric d x)
\end{code}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment