@@ -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