[project @ 2005-02-07 09:56:42 by ross]
[haskell-directory.git] / Text / Read / Lex.hs
index 5273c4f..740e27f 100644 (file)
@@ -1,4 +1,4 @@
-{-# OPTIONS -fno-implicit-prelude #-}
+{-# OPTIONS_GHC -fno-implicit-prelude #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Text.Read.Lex
@@ -56,14 +56,15 @@ import Control.Monad
 -- -----------------------------------------------------------------------------
 -- Lexing types
 
+-- ^ Haskell lexemes.
 data Lexeme
-  = Char   Char                -- Quotes removed, 
-  | String String      --      escapes interpreted
-  | Punc   String      -- Punctuation, eg "(", "::"
-  | Ident  String      -- Haskell identifiers, e.g. foo, baz
-  | Symbol String      -- Haskell symbols, e.g. >>, %
-  | Int Integer
-  | Rat Rational
+  = Char   Char                -- ^ Character literal
+  | String String      -- ^ String literal, with escapes interpreted
+  | Punc   String      -- ^ Punctuation or reserved symbol, e.g. @(@, @::@
+  | Ident  String      -- ^ Haskell identifier, e.g. @foo@, @Baz@
+  | Symbol String      -- ^ Haskell symbol, e.g. @>>@, @:%@
+  | Int Integer                -- ^ Integer literal
+  | Rat Rational       -- ^ Floating point literal
   | EOF
  deriving (Eq, Show)
 
@@ -188,7 +189,7 @@ lexCharE =
          _    -> pfail
   
   lexNumeric =
-    do base <- lexBaseChar
+    do base <- lexBaseChar <++ return 10
        n    <- lexInteger base
        guard (n <= toInteger (ord maxBound))
        return (chr (fromInteger n))
@@ -319,12 +320,9 @@ lexHexOct
        return (Int (val (fromIntegral base) 0 digits))
 
 lexBaseChar :: ReadP Int
--- Lex a single character indicating the base, 
--- or return 10 if there isn't one
-lexBaseChar = lex_base <++ return 10
-   where
-      lex_base = do { c <- get;
-                     case c of
+-- Lex a single character indicating the base; fail if not there
+lexBaseChar = do { c <- get;
+                  case c of
                        'o' -> return 8
                        'O' -> return 8
                        'x' -> return 16