Commit 3e75e4ba authored by simonpj's avatar simonpj
Browse files

[project @ 2003-02-06 09:36:46 by simonpj]

Fix version-itis in LexCore, so it will compile with 4.08 again
parent 81ca95c5
......@@ -3,7 +3,7 @@ module LexCore where
import ParserCoreUtils
import Ratio
import Char
import Numeric( readFloat )
import qualified Numeric( readFloat, readDec )
isNameChar c = isAlpha c || isDigit c || (c == '_') || (c == '\'')
isKeywordChar c = isAlpha c || (c == '_')
......@@ -92,3 +92,39 @@ lexKeyword cont cs =
("_",rest) -> cont TKwild rest
_ -> failP "invalid keyword" ('%':cs)
#if __GLASGOW_HASKELL__ >= 504
-- The readFloat in the Numeric library will do the job
readFloat :: (RealFrac a) => ReadS a
readFloat = Numeric.readFloat
#else
-- Haskell 98's Numeric.readFloat used to have a bogusly restricted signature
-- so it was incapable of reading a rational.
-- So for GHCs that have that old bogus library, here is the code, written out longhand.
readFloat r = [(fromRational ((n%1)*10^^(k-d)),t) | (n,d,s) <- readFix r,
(k,t) <- readExp s] ++
[ (0/0, t) | ("NaN",t) <- lex r] ++
[ (1/0, t) | ("Infinity",t) <- lex r]
where
readFix r = [(read (ds++ds'), length ds', t)
| (ds,d) <- lexDigits r,
(ds',t) <- lexFrac d ]
lexFrac ('.':ds) = lexDigits ds
lexFrac s = [("",s)]
readExp (e:s) | e `elem` "eE" = readExp' s
readExp s = [(0,s)]
readExp' ('-':s) = [(-k,t) | (k,t) <- Numeric.readDec s]
readExp' ('+':s) = Numeric.readDec s
readExp' s = Numeric.readDec s
lexDigits :: ReadS String
lexDigits s = case span isDigit s of
(cs,s') | not (null cs) -> [(cs,s')]
otherwise -> []
#endif
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment