@@ -13,7 +13,7 @@ instance Monad (Parser from) where
13 p >>= f = Parser (\cs -> concat [parse (f a) cs' | (a,cs') <- parse p cs])
13 p >>= f = Parser (\cs -> concat [parse (f a) cs' | (a,cs') <- parse p cs])
15instance MonadPlus (Parser from) where
15instance MonadPlus (Parser from) where
16− mzero = Parser (\cs -> [])
16+ mzero = Parser $ const []
17 mplus p q = Parser (\cs -> parse p cs ++ parse q cs)
17 mplus p q = Parser (\cs -> parse p cs ++ parse q cs)
19-- True recursive descent, tries everything.
19-- True recursive descent, tries everything.
@@ -24,7 +24,7 @@ p +|+ q = Parser (\cs -> case parse (mplus p q) cs of
25 (x:xs) -> [x])
25 (x:xs) -> [x])
27−zero = Parser (\cs -> [])
27+zero = Parser $ const []
29item = Parser (\cs -> case cs of
29item = Parser (\cs -> case cs of
@@ -40,7 +40,7 @@ string (c:cs) = do {char c; string cs; return (c:cs)}
40star p = plus p +++ return []
40star p = plus p +++ return []
41plus p = do {a <- p; as <- star p; return (a:as)}
41plus p = do {a <- p; as <- star p; return (a:as)}
43−optional p = do { p >>= return . Just } +++ return Nothing
43+optional p = (Just `liftM` p) +++ return Nothing
45nospace = guard . (==0) . length =<< space
45nospace = guard . (==0) . length =<< space
46space = star $ sat isSpace
46space = star $ sat isSpace
@@ -66,7 +66,7 @@ sepBy1 sep p = do
66 xs <- star (sep >> p)
66 xs <- star (sep >> p)
67 return $ x:xs
67 return $ x:xs
69−select ps = foldl1 (+|+) ps
69+select = foldl1 (+|+)
71chainl p op a = (chainl1 p op) +++ return a
71chainl p op a = (chainl1 p op) +++ return a
72chainl1 p op = do {a <- p; rest a}
72chainl1 p op = do {a <- p; rest a}
@@ -79,4 +79,4 @@ extractResult err parse =
79 case parse of
79 case parse of
80 (r,[]) : _ -> Right r
80 (r,[]) : _ -> Right r
81 _ : rest -> extractResult err rest
81 _ : rest -> extractResult err rest
82− [] -> Left err
82+ [] -> Left err