[project @ 2002-09-26 09:16:33 by simonpj]
[ghc-base.git] / GHC / Read.lhs
index 68d0521..2bc3320 100644 (file)
@@ -41,7 +41,6 @@ module GHC.Read
   , readListDefault, readListPrecDefault
 
   -- Temporary
-  , readList__
   , readParen
   )
  where
@@ -75,11 +74,10 @@ import GHC.Base
 import GHC.Arr
 \end{code}
 
--------------------------------------------------------
-       TEMPORARY UNTIL I DO DERIVED READ
 
 \begin{code}
 readParen       :: Bool -> ReadS a -> ReadS a
+-- A Haskell 98 function
 readParen b g   =  if b then mandatory else optional
                    where optional r  = g r ++ mandatory r
                          mandatory r = do
@@ -87,21 +85,6 @@ readParen b g   =  if b then mandatory else optional
                                (x,t)   <- optional s
                                (")",u) <- lex t
                                return (x,u)
-
-
-readList__ :: ReadS a -> ReadS [a]
-
-readList__ readx
-  = readParen False (\r -> do
-                      ("[",s) <- lex r
-                      readl s)
-  where readl  s = 
-           (do { ("]",t) <- lex s ; return ([],t) }) ++
-          (do { (x,t) <- readx s ; (xs,u) <- readl2 t ; return (x:xs,u) })
-
-       readl2 s = 
-          (do { ("]",t) <- lex s ; return ([],t) }) ++
-          (do { (",",t) <- lex s ; (x,u) <- readx t ; (xs,v) <- readl2 u ; return (x:xs,v) })
 \end{code}
 
 
@@ -307,10 +290,10 @@ to parse it in a context with a higher precedence level than k. But if
 there is one parenthesis parsed, then the required precedence level
 drops to 0 again, and parsing inside p may succeed.
 
-'appPrec' is just the precedence level of function application (maybe
-it should be called 'appPrec' instead).  So, if we are parsing
-function application, we'd better require the precedence level to be
-at least 'appPrec'. Otherwise, we have to put parentheses around it.
+'appPrec' is just the precedence level of function application.  So,
+if we are parsing function application, we'd better require the
+precedence level to be at least 'appPrec'. Otherwise, we have to put
+parentheses around it.
 
 'step' is used to increase the precedence levels inside a
 parser, and can be used to express left- or right- associativity. For
@@ -326,14 +309,13 @@ parenthesis-like objects such as (...) and [...] can be an argument to
 instance Read a => Read (Maybe a) where
   readPrec =
     parens
-    ( prec appPrec
-      ( do L.Ident "Nothing" <- lexP
-           return Nothing
-       +++
-        do L.Ident "Just" <- lexP
-           x            <- step readPrec
-           return (Just x)
-      )
+    (do L.Ident "Nothing" <- lexP
+        return Nothing
+     +++
+     prec appPrec (
+       do L.Ident "Just" <- lexP
+           x              <- step readPrec
+           return (Just x))
     )
 
   readListPrec = readListPrecDefault