PasteRack.org
Paste # 56483
2015-03-27 14:03:59

Fork as a new paste.

Paste viewed 100 times.


Embed:

TR ADT

#lang typed/racket/base

(require racket/match
         (for-syntax typed/racket/base))

(struct RawStx ((val : Any) (ctx : Any)) #:transparent)
(struct Wrap ((stx : Stx) (ctx : Any)) #:transparent)

(define-match-expander Stx
  (lambda (stx)
    (syntax-case stx () ((_ pat) #'(app Stx-unwrap pat))))
  (lambda (stx)
    (syntax-case stx ()
      ((_ more ...) #'(RawStx more ...))
      (_ #'RawStx))))

(define-type Stx (U Wrap RawStx) #:omit-define-syntaxes)

(define (Stx-unwrap (stx : Stx)) : RawStx
  (error "fix me"))

(Stx 'hello 'world)

Stx