]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Parser.hs
Fixed breakage on GHC 6.10.1
[Lucu.git] / Network / HTTP / Lucu / Parser.hs
index bbe16a3d80b8bd3d4da6f2263fbe995f9cf3fd75..90c52696fbb4293e95849e5335758d7a255913bd 100644 (file)
@@ -33,6 +33,7 @@ module Network.HTTP.Lucu.Parser
     , char
     , string
     , (<|>)
+    , choice
     , oneOf
     , digit
     , hexDigit
@@ -51,9 +52,8 @@ module Network.HTTP.Lucu.Parser
     where
 
 import           Control.Monad.State.Strict
-import           Data.ByteString.Base (LazyByteString)
-import           Data.ByteString.Lazy ()
-import qualified Data.ByteString.Lazy.Char8 as B
+import qualified Data.ByteString.Lazy as Lazy (ByteString)
+import qualified Data.ByteString.Lazy.Char8 as B hiding (ByteString)
 
 -- |@'Parser' a@ is obviously a parser which parses and returns @a@.
 newtype Parser a = Parser {
@@ -63,7 +63,7 @@ newtype Parser a = Parser {
 
 data ParserState
     = PST {
-        pstInput      :: LazyByteString
+        pstInput      :: Lazy.ByteString
       , pstIsEOFFatal :: !Bool
       }
     deriving (Eq, Show)
@@ -95,7 +95,7 @@ failP = fail undefined
 
 -- |@'parse' p bstr@ parses @bstr@ with @p@ and returns @(# result,
 -- remaining #)@.
-parse :: Parser a -> LazyByteString -> (# ParserResult a, LazyByteString #)
+parse :: Parser a -> Lazy.ByteString -> (# ParserResult a, Lazy.ByteString #)
 parse p input -- input は lazy である必要有り。
     = p `seq`
       let (result, state') = runState (runParser p) (PST input True)
@@ -103,7 +103,7 @@ parse p input -- input は lazy である必要有り。
         result `seq` (# result, pstInput state' #) -- pstInput state' も lazy である必要有り。
 
 -- |@'parseStr' p str@ packs @str@ and parses it.
-parseStr :: Parser a -> String -> (# ParserResult a, LazyByteString #)
+parseStr :: Parser a -> String -> (# ParserResult a, Lazy.ByteString #)
 parseStr p input
     = p `seq` -- input は lazy である必要有り。
       parse p (B.pack input)
@@ -180,6 +180,10 @@ f <|> g
                                             runParser g
 
 
+choice :: [Parser a] -> Parser a
+choice = foldl (<|>) failP
+
+
 oneOf :: [Char] -> Parser Char
 oneOf = foldl (<|>) failP . map char
 
@@ -190,7 +194,7 @@ notFollowedBy p
       Parser $! do saved  <- get -- 状態を保存
                    result <- runParser p
                    case result of
-                     Success a    -> do put saved -- 状態を復歸
+                     Success _    -> do put saved -- 状態を復歸
                                         return IllegalInput
                      IllegalInput -> do put saved -- 状態を復歸
                                         return $! Success ()