# One Kind of Binding?

**URL:** <https://racket.discourse.group/t/one-kind-of-binding/3414>\
**Category:** General\
**Tags:** macro\
**Created:** [December 14, 2024, 11:10am UTC](https://racket.discourse.group/t/one-kind-of-binding/3414 "2024-12-14T11:10:40Z")\
**Posts on this page:** 1\
**Showing post:** 9

<div class="post-metadata">

**Author:** ![benknoble](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/benknoble/32/16_2.png) [@benknoble](https://racket.discourse.group/u/benknoble)\
**Post date:** [December 17, 2024, 1:46pm UTC](https://racket.discourse.group/t/one-kind-of-binding/3414/9 "2024-12-17T13:46:26Z")

</div>

Meta: an [originating thread](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/57) from Qi's meeting notes.

* * *

I have not completely followed the `abc`/`syntax-local-value` problems, but I think others have covered my own opinions pretty well. That is, there might be a way to do this that that looks like `define-syntax` as `insert-compiler-hook` and `for-lang` as a (possibly implicit) way to insert it.

I especially agree with @shhyou and @notjack 's characterizations: I suggested a similar implementation strategy, and I suspect _one_ motiviation for Sid's desire for a simpler (?) model is that it would make testing Qi's deforestation pipeline easier. In particular, there we care about the results of expansion _and_ the clients' exercise of the macros (in that we should get the same results through a completely different interpretation of the surface code).

2 other open not-so-open (?) questions, in my mind:

1. If functions manipulating syntax may eventually become macros, they will still need a rich API of syntax operators. You might be able to make `syntax-local-value` and `syntax-local-eval` implicit (vis. evaluation of bindings and expressions at the runtime phase of the ordinary function that happens to manipulate syntax), but I don't think you could remove, _e.g._, `syntax-local-lift-require` and the rest of the rich API, nor should you want to.

2. What happens for things like `(require (for-lang (only-in racket/base add1))) (add1 4)`? Presumably that's a expand-time contract-style error that `add1` only accepts numbers and was given syntax? (I think that would be on-par with today.)

---

_[View the full topic](https://racket.discourse.group/t/one-kind-of-binding/3414)._
