ref: a16c884ed8631365a4e96e5c552120e5fc748435
parent: 1ea602aafb8fde4afd5c0f7dbbdb673627782b4d
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sat Feb 3 17:11:29 EST 2024
Temporary Read class.
--- a/lib/Text/Read.hs
+++ b/lib/Text/Read.hs
@@ -1,6 +1,58 @@
module Text.Read(
- Read(..)
+ ReadS,
+ Read(..),
read,
readMaybe,
- ReadS,
+ readParen,
) where
+import Primitives
+import Control.Error
+import Control.Monad
+import Data.Char
+import Data.Bool_Type
+import Data.Eq
+import Data.List_Type
+import Data.Maybe_Type
+
+type String = [Char]
+
+type ReadS a = String -> [(a, String)]
+
+class Read a where
+ readsPrec :: Int -> ReadS a
+ readList :: ReadS [a]
+
+read :: forall a . Read a => String -> a
+read s =
+ case readsPrec 0 s of
+ [(a, [])] -> a
+ _ -> error "read: failed"
+
+readMaybe :: forall a . Read a => String -> Maybe a
+readMaybe s =
+ case readsPrec 0 s of
+ [(a, [])] -> Just a
+ _ -> Nothing
+
+readParen :: forall a . Bool -> ReadS a -> ReadS a
+readParen b g =
+ if b then mandatory else optional
+ where
+ optional :: ReadS a
+ optional r = g r ++ mandatory r
+ mandatory :: ReadS a
+ mandatory r = do
+ -- XXX compiler broken ('(',s) <- lex r+ (lp,s) <- lex r
+ guard (lp == '(')+ (x,t) <- optional s
+ -- (')',u) <- lex t+ (rp,u) <- lex t
+ guard (rp == ')')
+ return (x,u)
+
+-- Really bad lexer
+lex :: ReadS Char
+lex "" = []
+lex (c:cs) | isSpace c = lex cs
+ | True = [(c, cs)]
--
⑨