@@ -61,11 +61,7 @@ infixl 3 withError as <?>
61
61
62
62
-- | Parse a string between opening and closing markers.
63
63
between :: forall a open close . Parser open -> Parser close -> Parser a -> Parser a
64
- between open close p = do
65
- open
66
- a <- p
67
- close
68
- pure a
64
+ between open close p = open *> p <* close
69
65
70
66
-- | Parse a value with a default value in case of failure.
71
67
option :: forall a . a -> Parser a -> Parser a
@@ -87,9 +83,7 @@ sepBy p sep = sepBy1 p sep <|> pure Nil
87
83
sepBy1 :: forall a sep . Parser a -> Parser sep -> Parser (List a )
88
84
sepBy1 p sep = do
89
85
a <- p
90
- as <- many $ do
91
- sep
92
- p
86
+ as <- many $ sep *> p
93
87
pure (Cons a as)
94
88
95
89
-- | Parse zero or more separated values, optionally ending with a separator.
@@ -100,23 +94,17 @@ sepEndBy p sep = sepEndBy1 p sep <|> pure Nil
100
94
sepEndBy1 :: forall a sep . Parser a -> Parser sep -> Parser (List a )
101
95
sepEndBy1 p sep = do
102
96
a <- p
103
- (do sep
97
+ (do _ <- sep
104
98
as <- sepEndBy p sep
105
99
pure (Cons a as)) <|> pure (singleton a)
106
100
107
101
-- | Parse zero or more separated values, ending with a separator.
108
102
endBy1 :: forall a sep . Parser a -> Parser sep -> Parser (List a )
109
- endBy1 p sep = many1 $ do
110
- a <- p
111
- sep
112
- pure a
103
+ endBy1 p sep = many1 $ p <* sep
113
104
114
105
-- | Parse one or more separated values, ending with a separator.
115
106
endBy :: forall a sep . Parser a -> Parser sep -> Parser (List a )
116
- endBy p sep = many $ do
117
- a <- p
118
- sep
119
- pure a
107
+ endBy p sep = many $ p <* sep
120
108
121
109
-- | Parse zero or more values separated by a right-associative operator.
122
110
chainr :: forall a . Parser a -> Parser (a -> a -> a ) -> a -> Parser a
0 commit comments