@@ -52,20 +52,15 @@ infix 3 asErrorMessage as <??>
52
52
-- | parens = between (string "(") (string ")")
53
53
-- | ```
54
54
between :: 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
60
56
61
57
-- | Provide a default result in the case where a parser fails without consuming input.
62
58
option :: forall m s a . Monad m => a -> ParserT s m a -> ParserT s m a
63
59
option a p = p <|> pure a
64
60
65
61
-- | Optionally parse something, failing quietly.
66
62
optional :: 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
69
64
70
65
-- | pure `Nothing` in the case where a parser fails without consuming input.
71
66
optionMaybe :: 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
99
94
sepBy1 :: forall m s a sep . Monad m => ParserT s m a -> ParserT s m sep -> ParserT s m (List a )
100
95
sepBy1 p sep = do
101
96
a <- p
102
- as <- many $ do
103
- sep
104
- p
97
+ as <- many $ sep *> p
105
98
pure (a : as)
106
99
107
100
-- | Parse phrases delimited and optionally terminated by a separator.
@@ -112,23 +105,17 @@ sepEndBy p sep = sepEndBy1 p sep <|> pure Nil
112
105
sepEndBy1 :: forall m s a sep . Monad m => ParserT s m a -> ParserT s m sep -> ParserT s m (List a )
113
106
sepEndBy1 p sep = do
114
107
a <- p
115
- (do sep
108
+ (do _ <- sep
116
109
as <- sepEndBy p sep
117
110
pure (a : as)) <|> pure (singleton a)
118
111
119
112
-- | Parse phrases delimited and terminated by a separator, requiring at least one match.
120
113
endBy1 :: 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
125
115
126
116
-- | Parse phrases delimited and terminated by a separator.
127
117
endBy :: 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
132
119
133
120
-- | Parse phrases delimited by a right-associative operator.
134
121
-- |
@@ -189,9 +176,7 @@ notFollowedBy p = try $ (try p *> fail "Negated parser succeeded") <|> pure unit
189
176
manyTill :: forall s a m e . Monad m => ParserT s m a -> ParserT s m e -> ParserT s m (List a )
190
177
manyTill p end = scan
191
178
where
192
- scan = (do
193
- end
194
- pure Nil )
179
+ scan = (end $> Nil )
195
180
<|> (do
196
181
x <- p
197
182
xs <- scan
0 commit comments