diff --git a/002_parsers.md b/002_parsers.md index 9604c2c..8ebc803 100644 --- a/002_parsers.md +++ b/002_parsers.md @@ -105,14 +105,14 @@ itself if there is not at least a single match. ```haskell -- | One or more. -some :: f a -> f [a] +some :: Alternative f => f a -> f [a] some v = some_v where many_v = some_v <|> pure [] some_v = (:) <$> v <*> many_v -- | Zero or more. -many :: f a -> f [a] +many :: Alternative f => f a -> f [a] many v = many_v where many_v = some_v <|> pure [] diff --git a/chapter3/parsec.hs b/chapter3/parsec.hs index 5d2cbfe..958629e 100644 --- a/chapter3/parsec.hs +++ b/chapter3/parsec.hs @@ -12,7 +12,7 @@ runParser :: Parser a -> String -> a runParser m s = case parse m s of [(res, [])] -> res - [(_, rs)] -> error "Parser did not consume entire stream." + [(_, _)] -> error "Parser did not consume entire stream." _ -> error "Parser error." item :: Parser Char @@ -62,7 +62,7 @@ satisfy :: (Char -> Bool) -> Parser Char satisfy p = item `bind` \c -> if p c then unit c - else (Parser (\cs -> [])) + else failure ------------------------------------------------------------------------------- -- Combinators