Writing macros in lisp is straightforward, but providing good error message is much trickier. The Racket docs have an excellent discussion of writing a mylet macro with clear errors that reference which part is wrong: https://docs.racket-lang.org/syntax/stxparse-intro.html