@@ -64,7 +64,9 @@ item = P (\inp => case unpack inp of
6464--------------------------------------------------------------------------------
6565
6666sat : (Char -> Bool) -> Parser Char
67−sat p = item >>= (\x => if p x then pure x else failure "failed")
67+sat p = do x <- item
68+ guard (p x)
69+ pure x
6870
6971oneof : List Char -> Parser Char
7072oneof xs = sat (\x => elem x xs)
@@ -88,7 +90,7 @@ char : Char -> Parser Char
8890char x = sat (== x)
8991
9092string : String -> Parser String
91−string s = [| pack (traverse char (unpack s)) |]
93+string s = fmap pack (traverse char (unpack s))
9294
9395many1 : Parser a -> Parser (List a)
9496many : Parser a -> Parser (List a)
@@ -131,10 +133,7 @@ space = do many (sat isSpace)
131133--------------------------------------------------------------------------------
132134
133135token : Parser a -> Parser a
134−token p = do space
135− v <- p
136− space
137− pure v
136+token p = space $> p <$ space
138137
139138identifier : Parser String
140139identifier = token ident