(original) (raw)

{-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude #-}

module Text.Read (

Read(..), ReadS,

reads, read, readParen, lex,

module Text.ParserCombinators.ReadPrec, L.Lexeme(..), lexP, parens, readListDefault, readListPrecDefault, readEither, readMaybe

) where

import GHC.Base import GHC.Read import Data.Either import Text.ParserCombinators.ReadP as P import Text.ParserCombinators.ReadPrec import qualified Text.Read.Lex as L

reads :: Read a => ReadS a reads = readsPrec minPrec

readEither :: Read a => String -> Either String a readEither s = case [ x | (x,"") <- readPrec_to_S read' minPrec s ] of [x] -> Right x [] -> Left "Prelude.read: no parse" _ -> Left "Prelude.read: ambiguous parse" where read' = do x <- readPrec lift P.skipSpaces return x

readMaybe :: Read a => String -> Maybe a readMaybe s = case readEither s of Left _ -> Nothing Right a -> Just a

read :: Read a => String -> a read s = either errorWithoutStackTrace id (readEither s)