X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Text%2FRead.hs;h=5009efbfb8aeb35ad5a530c7c6043ec584c1eff0;hb=fc6c3c6e5a508b74bed8559c2e4ff6bf74b9ae92;hp=bf70920138eeaa22d8e5e0434d8560eb1c86a8c7;hpb=2ed749d45e044d5793a8d150c3ee226aca206773;p=ghc-base.git diff --git a/Text/Read.hs b/Text/Read.hs index bf70920..5009efb 100644 --- a/Text/Read.hs +++ b/Text/Read.hs @@ -1,4 +1,4 @@ -{-# OPTIONS -fno-implicit-prelude #-} +{-# OPTIONS_GHC -fno-implicit-prelude #-} ----------------------------------------------------------------------------- -- | -- Module : Text.Read @@ -7,38 +7,64 @@ -- -- Maintainer : libraries@haskell.org -- Stability : provisional --- Portability : portable +-- Portability : non-portable (uses Text.ParserCombinators.ReadP) +-- +-- Converting strings to values. -- -- The "Text.Read" library is the canonical library to import for --- 'Read'-class facilities. It offers an extended and much improved --- 'Read' class, which constitutes a proposed alternative to the --- Haskell98 'Read'. In particular, writing parsers is easier, and +-- 'Read'-class facilities. For GHC only, it offers an extended and much +-- improved 'Read' class, which constitutes a proposed alternative to the +-- Haskell 98 'Read'. In particular, writing parsers is easier, and -- the parsers are much more efficient. -- ----------------------------------------------------------------------------- module Text.Read ( -- * The 'Read' class - Read(..), -- The Read class - ReadS, -- String -> Maybe (a,String) + Read(..), -- The Read class + ReadS, -- String -> Maybe (a,String) -- * Haskell 98 functions - reads, -- :: (Read a) => ReadS a - read, -- :: (Read a) => String -> a - readParen, -- :: Bool -> ReadS a -> ReadS a - lex, -- :: ReadS String + reads, -- :: (Read a) => ReadS a + read, -- :: (Read a) => String -> a + readParen, -- :: Bool -> ReadS a -> ReadS a + lex, -- :: ReadS String +#if defined(__GLASGOW_HASKELL__) || defined(__HUGS__) -- * New parsing functions module Text.ParserCombinators.ReadPrec, - L.Lexeme(..), - lexP, -- :: ReadPrec Lexeme - readListDefault, -- :: Read a => ReadS [a] - readListPrecDefault, -- :: Read a => ReadPrec [a] + L.Lexeme(..), + lexP, -- :: ReadPrec Lexeme + parens, -- :: ReadPrec a -> ReadPrec a +#endif +#ifdef __GLASGOW_HASKELL__ + readListDefault, -- :: Read a => ReadS [a] + readListPrecDefault, -- :: Read a => ReadPrec [a] +#endif ) where #ifdef __GLASGOW_HASKELL__ import GHC.Read +#endif +#if defined(__GLASGOW_HASKELL__) || defined(__HUGS__) import Text.ParserCombinators.ReadPrec import qualified Text.Read.Lex as L -#endif +#endif + +#ifdef __HUGS__ +-- copied from GHC.Read + +lexP :: ReadPrec L.Lexeme +lexP = lift L.lex + +parens :: ReadPrec a -> ReadPrec a +parens p = optional + where + optional = p +++ mandatory + mandatory = do + L.Punc "(" <- lexP + x <- reset optional + L.Punc ")" <- lexP + return x +#endif