X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FRead.lhs;h=77daececb7306dfda10659d977d823f7114a3d82;hb=41e8fba828acbae1751628af50849f5352b27873;hp=b568287e66b625a72e4c09e19ebf9b4ee5d282c8;hpb=ccc7548348fa0d5a10e4c795c5edc13d0dd3f014;p=ghc-base.git diff --git a/GHC/Read.lhs b/GHC/Read.lhs index b568287..77daece 100644 --- a/GHC/Read.lhs +++ b/GHC/Read.lhs @@ -1,6 +1,7 @@ \begin{code} -{-# OPTIONS_GHC -XNoImplicitPrelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude #-} {-# OPTIONS_HADDOCK hide #-} + ----------------------------------------------------------------------------- -- | -- Module : GHC.Read @@ -451,28 +452,28 @@ instance Read L.Lexeme where %********************************************************* \begin{code} -readNumber :: Num a => (L.Lexeme -> Maybe a) -> ReadPrec a +readNumber :: Num a => (L.Lexeme -> ReadPrec a) -> ReadPrec a -- Read a signed number readNumber convert = parens ( do x <- lexP case x of - L.Symbol "-" -> do n <- readNumber convert + L.Symbol "-" -> do y <- lexP + n <- convert y return (negate n) - - _ -> case convert x of - Just n -> return n - Nothing -> pfail + + _ -> convert x ) -convertInt :: Num a => L.Lexeme -> Maybe a -convertInt (L.Int i) = Just (fromInteger i) -convertInt _ = Nothing -convertFrac :: Fractional a => L.Lexeme -> Maybe a -convertFrac (L.Int i) = Just (fromInteger i) -convertFrac (L.Rat r) = Just (fromRational r) -convertFrac _ = Nothing +convertInt :: Num a => L.Lexeme -> ReadPrec a +convertInt (L.Int i) = return (fromInteger i) +convertInt _ = pfail + +convertFrac :: Fractional a => L.Lexeme -> ReadPrec a +convertFrac (L.Int i) = return (fromInteger i) +convertFrac (L.Rat r) = return (fromRational r) +convertFrac _ = pfail instance Read Int where readPrec = readNumber convertInt