PasteRack.org
Paste # 37371
2014-10-20 23:10:48

Fork as a new paste.

Paste viewed 48 times.


Embed:

  1. #lang racket
  2.  
  3. (define-syntax define-hash-struct-helper
  4.   (syntax-rules ()
  5.     ((_ name marked-name params ...)
  6.      (begin
  7.        (struct marked-name (params ...) #:transparent)
  8.        (define-for-syntax match-expander
  9.          (syntax-rules ()
  10.            [(_ args (... ...)) (marked-name args (... ...))]))
  11.        (define-for-syntax expr-expander
  12.          (syntax-rules ()
  13.            [(_ args (... ...)) (marked-name args (... ...))]))
  14.        (define-match-expander name
  15.          match-expander
  16.          expr-expander)))))
  17.  
  18. (define-syntax define-hash-struct
  19.   (syntax-rules ()
  20.     ((_ name params ...)
  21.      (begin
  22.        (define-syntax helper
  23.          (syntax-rules ()
  24.            ((_ n p (... ...))
  25.             (define-hash-struct-helper n name p (... ...)))))
  26.        (helper name params ...)))))

=>