rpn/forms.ss
#lang scheme/base

(require "main.ss"
         "../ns.ss"
         (for-syntax
          scheme/base
          "parse-tx.ss"))
          
(provide (all-defined-out))
;; Defining multiple prefix subsitution patterns.
(define-syntax-rule (prefix-parsers namespace ((name arg ...) template) ...)
  (ns namespace
      (define-syntaxes (name ...)
        (values (rpn-syntax-rules () ((_ arg ...) template)) ...))))

;; Like 'prefix-parsers', but translate code using a different
;; compiler and splice it in.

(define-syntax-rule (prefix-parsers/meta ns lang: (pat code) ...)
  (begin
    ;; Evaluation the pattern to check if the names are actually
    ;; defined, but that doesn't work because it includes pattern
    ;; names as well..
    ;; (begin (lang: . code) ...) ;; test-eval it
    (prefix-parsers ns (pat (,(lang: . code))) ...)))


; (prefix-parsers (macro ((foo) (bar))))