PasteRack.org
Paste # 22325
2016-11-18 19:02:08

Forked from paste # 86722.

Fork as a new paste.

Paste viewed 206 times.


Embed:

define-datum-literal-set

  1. #lang racket/base
  2.  
  3. (require (for-syntax racket/base syntax/parse racket/syntax))
  4.  
  5. (define-syntax (define-datum-literal-set stx)
  6.   (syntax-parse stx
  7.    [(_ cls-name:id (lit*:id ...))
  8.     #:with set-name (format-id stx "~a-set" (syntax-e #'cls-name))
  9.     #'(begin-for-syntax
  10.       (define-literal-set set-name
  11.         #:datum-literals (lit* ...)
  12.         ())
  13.       (define-syntax-class cls-name
  14.         #:literal-sets ([set-name])
  15.         (pattern (~or lit* ...)))) ]))
  16.  
  17. (define-datum-literal-set var-type
  18.   (string timer float int32 uint64 boolean symbol point vector quat bound-frame))
  19.  
  20. (define-syntax (test stx)
  21.   (syntax-parse stx
  22.    [(_ a:var-type)
  23.     #''a]))
  24.  
  25. (test string)

=>