diff --git a/Robust_macros__syntax-parse.html b/Robust_macros__syntax-parse.html
index 66f41f8..2478566 100644
--- a/Robust_macros__syntax-parse.html
+++ b/Robust_macros__syntax-parse.html
@@ -6,8 +6,7 @@ message from misuse: expected a string, but got 0 Unfortunately the error code tends to overwhelm and/or obscure our
function definition. Also, the error message is good but not
great. Improving it would require even more error code. 3. Use a contract. misuse: contract violation expected: string? given: 0 in: the 1st argument of (-> string? string?) contract from: (function misuse) blaming: program at: eval:131.0 This is the best of both worlds. The contract is a simple and concise. Even better, it’s
-declarative. We say what we want, without needing to spell out what to
-do. On the other hand the user of our function gets a very detailed error
+declarative. We say what we want to happen, not how. On the other hand the user of our function gets a very detailed error
message. Plus, the message is in a standard, familiar format. 4. Use Typed Racket. eval:3:0: Type Checker: Expected String, but got Zero in: 0> (define (misuse s) (unless (string? s) (error 'misuse "expected a string, but got ~a" s)) (string-append s " snazzy suffix")) ; User of the function: > (misuse 0) ; I goofed, and understand why! It's a shame the writer of the ; function had to work so hard to tell me. > (define/contract (misuse s) (string? . -> . string?) (string-append s " snazzy suffix")) ; User of the function: > (misuse 0) ; I goofed, and understand why! I'm happier, and I hear the writer of ; the function is happier, too. #lang typed/racket > (: misuse (String -> String)) > (define (misuse s) (string-append s " snazzy suffix")) > (misuse 0)
Even better, Typed Racket can catch usage mistakes up-front at compile time.
For macros, we have similar choices.
1. Ignore the possibility of misuse. This choice is even worse for macros. The default error messages are even less likely to make sense, @@ -27,8 +26,8 @@ confused.
Examples section illustrating many real-world scenarios.
Furthermore, everything I’d learned up to this point prepared me to -appreciate what syntax-parse does, and why. That leaves -the "how" of using it, which seems pretty straightforward, so far.
This might well be a temporary state of me "not knowing what I don’t +appreciate what syntax-parse does, and why. The details of +how to use it seem pretty straightforward, so far.
This might well be a temporary state of me "not knowing what I don’t know". As I dig in and use it more, maybe I’ll discover something confusing or tricky. If/when I do, I’ll come back here and update this.
But for now I’ll focus on improving the previous parts.