From faa2f4ea42a9c81f9cb902ea815068c1041fe3c1 Mon Sep 17 00:00:00 2001 From: sof Date: Sat, 13 Apr 2002 05:08:55 +0000 Subject: [PATCH] [project @ 2002-04-13 05:08:55 by sof] readIEEENumber: support reading IEEE-754 'special' values (NaN,Inf) --- GHC/Read.lhs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/GHC/Read.lhs b/GHC/Read.lhs index 949ec59..a8240c6 100644 --- a/GHC/Read.lhs +++ b/GHC/Read.lhs @@ -1,5 +1,5 @@ % ------------------------------------------------------------------------------ -% $Id: Read.lhs,v 1.4 2002/04/11 12:03:44 simonpj Exp $ +% $Id: Read.lhs,v 1.5 2002/04/13 05:08:55 sof Exp $ % % (c) The University of Glasgow, 1994-2000 % @@ -384,6 +384,24 @@ readNumber convert = _ -> pfail ) +readIEEENumber :: (RealFloat a) => (Number -> Maybe a) -> ReadPrec a +-- Read a Float/Double. +readIEEENumber convert = + parens + ( do x <- lexP + case x of + Ident "NaN" -> return (0/0) + Ident "Infinity" -> return (1/0) + Symbol "-" -> do n <- readIEEENumber convert + return (negate n) + + Number y -> case convert y of + Just n -> return n + Nothing -> pfail + + _ -> pfail + ) + instance Read Int where readPrec = readNumber numberToInt readListPrec = readListPrecDefault @@ -395,12 +413,12 @@ instance Read Integer where readList = readListDefault instance Read Float where - readPrec = readNumber numberToFloat + readPrec = readIEEENumber numberToFloat readListPrec = readListPrecDefault readList = readListDefault instance Read Double where - readPrec = readNumber numberToDouble + readPrec = readIEEENumber numberToDouble readListPrec = readListPrecDefault readList = readListDefault -- 1.7.10.4