11--  | Primitive parsers for working with an input stream of type `String`.
22--  |
3- --  | All of these primitive parsers will consume their input  when they succeed.
3+ --  | All of these primitive parsers will consume when they succeed.
44--  |
5- --  | All of these primitive parsers will consume no input  when they
5+ --  | All of these primitive parsers will not consume  when they
66--  | fail.
77--  |
88--  | The behavior of these primitive parsers is based on the behavior of the
@@ -204,28 +204,42 @@ match p = do
204204  --  boundary.
205205  pure $ Tuple  (SCU .take (SCU .length input1 - SCU .length input2) input1) x
206206
207- --  | Compile a regular expression string  into a regular expression parser.
207+ --  | Compile a regular expression `String`  into a regular expression parser.
208208--  |
209- --  | This function will use the `Data.String.Regex.regex` function to compile and return a parser which can be used
209+ --  | This function will use the `Data.String.Regex.regex` function to compile
210+ --  | and return a parser which can be used
210211--  | in a `ParserT String m` monad.
212+ --  | If compilation fails then this function will return `Left` a compilation
213+ --  | error message.
214+ --  |
215+ --  | The returned parser will try to match the regular expression pattern once,
216+ --  | starting at the current parser position. On success, it will return
217+ --  | the matched substring.
218+ --  |
219+ --  | If the RegExp `String` is constant then we can assume that compilation will
220+ --  | always succeed and `unsafeCrashWith` if it doesn’t. If we dynamically
221+ --  | generate the RegExp `String` at runtime then we should handle the
222+ --  | case where compilation of the RegExp fails.
223+ --  |
224+ --  | This function should be called outside the context of a `ParserT String m`
225+ --  | monad for two reasons:
226+ --  | 1. If we call this function inside of the `ParserT String m` monad and
227+ --  |    then `fail` the parse when the compilation fails,
228+ --  |    then that could be confusing because a parser failure is supposed to
229+ --  |    indicate an invalid input string.
230+ --  |    If the compilation failure occurs in an `alt` then the compilation
231+ --  |    failure might not be reported at all and instead
232+ --  |    the input string would be parsed incorrectly.
233+ --  | 2. Compiling a RegExp is expensive and it’s better to do it
234+ --  |    once in advance and then use the compiled RegExp many times than
235+ --  |    to compile the RegExp many times during the parse.
211236--  |
212- --  | This parser will try to match the regular expression pattern starting 
213- --  | at the current parser position. On success, it will return the matched 
214- --  | substring .
237+ --  | This parser may be useful for quickly consuming a large section of the 
238+ --  | input `String`, because in a JavaScript runtime environment a compiled 
239+ --  | RegExp is a lot faster than a monadic parser built from parsing primitives .
215240--  |
216241--  | [*MDN Regular Expressions Cheatsheet*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Cheatsheet)
217242--  |
218- --  | This function should be called outside the context of a `ParserT String m` monad, because this function might
219- --  | fail with a `Left` RegExp compilation error message.
220- --  | If you call this function inside of the `ParserT String m` monad and then `fail` the parse when the compilation fails,
221- --  | then that could be confusing because a parser failure is supposed to indicate an invalid input string.
222- --  | If the compilation failure occurs in an `alt` then the compilation failure might not be reported at all and instead
223- --  | the input string would be parsed incorrectly.
224- --  |
225- --  | This parser may be useful for quickly consuming a large section of the
226- --  | input `String`, because in a JavaScript runtime environment the RegExp
227- --  | runtime is a lot faster than primitive parsers.
228- --  |
229243--  | #### Example
230244--  |
231245--  | This example shows how to compile and run the `xMany` parser which will
@@ -246,7 +260,8 @@ match p = do
246260--  | regex "x*" (dotAll <> ignoreCase)
247261--  | ```
248262--  |
249- --  | The `dotAll`, `unicode`, and `ignoreCase` flags might make sense for a `regex` parser. The other flags will
263+ --  | The `dotAll`, `unicode`, and `ignoreCase` flags might make sense for
264+ --  | a `regex` parser. The other flags will
250265--  | probably cause surprising behavior and you should avoid them.
251266--  |
252267--  | [*MDN Advanced searching with flags*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#advanced_searching_with_flags)
0 commit comments