|
48 | 48 | ParseErr |
49 | 49 | </a> |
50 | 50 | </li> |
| 51 | + <li> |
| 52 | + <a href="Expected.html"> |
| 53 | + Expected |
| 54 | + </a> |
| 55 | + </li> |
51 | 56 | <li> |
52 | 57 | <a href="Reply.html"> |
53 | 58 | Reply |
|
73 | 78 | <div class="module-description"> |
74 | 79 | <p>is a Parsec-style parser combinator library for Carp.</p> |
75 | 80 | <h2>Installation</h2> |
76 | | -<pre><code>(load "git@github.com:carpentry-org/parsec@0.1.0") |
| 81 | +<pre><code>(load "git@github.com:carpentry-org/parsec@0.2.0") |
77 | 82 | </code></pre> |
78 | 83 | <h2>Usage</h2> |
79 | 84 | <pre><code>(let [p (Parser.seq (Parser.byte \h) (Parser.byte \i))] |
@@ -172,6 +177,27 @@ <h3 id="any-byte"> |
172 | 177 |
|
173 | 178 | </p> |
174 | 179 | </div> |
| 180 | + <div class="binder"> |
| 181 | + <a class="anchor" href="#before"> |
| 182 | + <h3 id="before"> |
| 183 | + before |
| 184 | + </h3> |
| 185 | + </a> |
| 186 | + <div class="description"> |
| 187 | + defn |
| 188 | + </div> |
| 189 | + <p class="sig"> |
| 190 | + (Fn [(Parser a), (Parser b)] (Parser a)) |
| 191 | + </p> |
| 192 | + <pre class="args"> |
| 193 | + (before p q) |
| 194 | + </pre> |
| 195 | + <p class="doc"> |
| 196 | + <p>runs <code>p</code> then <code>q</code>, returning <code>p</code>'s value and discarding |
| 197 | +<code>q</code>'s. The mirror image of <code>then</code>.</p> |
| 198 | + |
| 199 | + </p> |
| 200 | + </div> |
175 | 201 | <div class="binder"> |
176 | 202 | <a class="anchor" href="#between"> |
177 | 203 | <h3 id="between"> |
@@ -216,6 +242,31 @@ <h3 id="bind"> |
216 | 242 |
|
217 | 243 | </p> |
218 | 244 | </div> |
| 245 | + <div class="binder"> |
| 246 | + <a class="anchor" href="#bind-result"> |
| 247 | + <h3 id="bind-result"> |
| 248 | + bind-result |
| 249 | + </h3> |
| 250 | + </a> |
| 251 | + <div class="description"> |
| 252 | + defn |
| 253 | + </div> |
| 254 | + <p class="sig"> |
| 255 | + (Fn [(Parser a), (Fn [a, (Ref Cursor b)] (Result c ParseErr))] (Parser c)) |
| 256 | + </p> |
| 257 | + <pre class="args"> |
| 258 | + (bind-result p f) |
| 259 | + </pre> |
| 260 | + <p class="doc"> |
| 261 | + <p>runs <code>p</code>, then applies <code>f</code> to its value and the |
| 262 | +cursor <em>after</em> <code>p</code>. <code>f</code> returns a <code>(Result b ParseErr)</code> directly, |
| 263 | +avoiding a per-parse <code>Parser.pure</code>/<code>Parser.fail</code> rebuild that the |
| 264 | +equivalent <code>bind</code> formulation would do. The cursor argument lets <code>f</code> |
| 265 | +build a <code>ParseErr</code> at the right position when it returns |
| 266 | +<code>Result.Error</code>.</p> |
| 267 | + |
| 268 | + </p> |
| 269 | + </div> |
219 | 270 | <div class="binder"> |
220 | 271 | <a class="anchor" href="#byte"> |
221 | 272 | <h3 id="byte"> |
@@ -974,6 +1025,28 @@ <h3 id="take-while1"> |
974 | 1025 |
|
975 | 1026 | </p> |
976 | 1027 | </div> |
| 1028 | + <div class="binder"> |
| 1029 | + <a class="anchor" href="#then"> |
| 1030 | + <h3 id="then"> |
| 1031 | + then |
| 1032 | + </h3> |
| 1033 | + </a> |
| 1034 | + <div class="description"> |
| 1035 | + defn |
| 1036 | + </div> |
| 1037 | + <p class="sig"> |
| 1038 | + (Fn [(Parser a), (Parser b)] (Parser b)) |
| 1039 | + </p> |
| 1040 | + <pre class="args"> |
| 1041 | + (then p q) |
| 1042 | + </pre> |
| 1043 | + <p class="doc"> |
| 1044 | + <p>runs <code>p</code> then <code>q</code>, discarding <code>p</code>'s value and returning |
| 1045 | +<code>q</code>'s. Equivalent to <code>(bind p (fn [_] q))</code> but does not allocate the |
| 1046 | +continuation closure per parse.</p> |
| 1047 | + |
| 1048 | + </p> |
| 1049 | + </div> |
977 | 1050 | <div class="binder"> |
978 | 1051 | <a class="anchor" href="#try"> |
979 | 1052 | <h3 id="try"> |
|
0 commit comments