John Cowan wrote: 
On Wed, May 17, 2017 at 6:34 AM, Alex Shinn <xxxxxx@gmail.com> wrote:
R6RS identifier syntax can be used to implement compiler macros -
in an operator position the macro form is used, otherwise the
procedure form is used.
The docs say that the only two cases for identifier-syntax are _ and (set! _ value).  Racket may support more general identifier-syntax templates; I haven't been able to figure out the docs.

Syntax-case suffices. Something like the following should work:

(define (%fx+ a b)
  ($fx+ a b))

(define-syntax fx+
  (lambda (stx)
    (syntax-case stx ()
      (id (identifier? #'id) #'%fx+)
      ((_ a b) #'($fx+ a b)))))

Here, ($fx+ a b) is the primitive form.

I think this use case is the main reason in favor of identifier macros.

-- Marc