@@ -52,20 +52,15 @@ infix 3 asErrorMessage as <??>
5252-- | parens = between (string "(") (string ")")
5353-- | ```
5454between :: forall m s a open close . Monad m => ParserT s m open -> ParserT s m close -> ParserT s m a -> ParserT s m a
55- between open close p = do
56- open
57- a <- p
58- close
59- pure a
55+ between open close p = open *> p <* close
6056
6157-- | Provide a default result in the case where a parser fails without consuming input.
6258option :: forall m s a . Monad m => a -> ParserT s m a -> ParserT s m a
6359option a p = p <|> pure a
6460
6561-- | Optionally parse something, failing quietly.
6662optional :: forall m s a . Monad m => ParserT s m a -> ParserT s m Unit
67- optional p = (do p
68- pure unit) <|> pure unit
63+ optional p = (void p) <|> pure unit
6964
7065-- | pure `Nothing` in the case where a parser fails without consuming input.
7166optionMaybe :: forall m s a . Monad m => ParserT s m a -> ParserT s m (Maybe a )
@@ -99,9 +94,7 @@ sepBy p sep = sepBy1 p sep <|> pure Nil
9994sepBy1 :: forall m s a sep . Monad m => ParserT s m a -> ParserT s m sep -> ParserT s m (List a )
10095sepBy1 p sep = do
10196 a <- p
102- as <- many $ do
103- sep
104- p
97+ as <- many $ sep *> p
10598 pure (a : as)
10699
107100-- | Parse phrases delimited and optionally terminated by a separator.
@@ -112,23 +105,17 @@ sepEndBy p sep = sepEndBy1 p sep <|> pure Nil
112105sepEndBy1 :: forall m s a sep . Monad m => ParserT s m a -> ParserT s m sep -> ParserT s m (List a )
113106sepEndBy1 p sep = do
114107 a <- p
115- (do sep
108+ (do _ <- sep
116109 as <- sepEndBy p sep
117110 pure (a : as)) <|> pure (singleton a)
118111
119112-- | Parse phrases delimited and terminated by a separator, requiring at least one match.
120113endBy1 :: forall m s a sep . Monad m => ParserT s m a -> ParserT s m sep -> ParserT s m (List a )
121- endBy1 p sep = some $ do
122- a <- p
123- sep
124- pure a
114+ endBy1 p sep = some $ p <* sep
125115
126116-- | Parse phrases delimited and terminated by a separator.
127117endBy :: forall m s a sep . Monad m => ParserT s m a -> ParserT s m sep -> ParserT s m (List a )
128- endBy p sep = many $ do
129- a <- p
130- sep
131- pure a
118+ endBy p sep = many $ p <* sep
132119
133120-- | Parse phrases delimited by a right-associative operator.
134121-- |
@@ -189,9 +176,7 @@ notFollowedBy p = try $ (try p *> fail "Negated parser succeeded") <|> pure unit
189176manyTill :: forall s a m e . Monad m => ParserT s m a -> ParserT s m e -> ParserT s m (List a )
190177manyTill p end = scan
191178 where
192- scan = (do
193- end
194- pure Nil )
179+ scan = (end $> Nil )
195180 <|> (do
196181 x <- p
197182 xs <- scan
0 commit comments