Put all files into a directory named shen-thing.
Run
$ cd shen-thing
$ raco pkg install
To test, run racket test.rkt. You should see:
(my-list '(2 3 4))
(my-list '(2 3 4))
as the output
| #lang racket/base | |
| (provide configure) | |
| (require "reader.rkt") | |
| (define (configure data) | |
| (current-read-interaction read-syntax)) |
| #lang racket/base | |
| (define (get-info data) | |
| (λ (key default) | |
| (case key | |
| [(configure-runtime) | |
| '(#(shen-thing/configure-runtime configure #f))] | |
| [else | |
| default]))) | |
| (provide get-info) |
| #lang racket | |
| (module reader syntax/module-reader | |
| shen-thing | |
| #:read read | |
| #:read-syntax read-syntax | |
| #:language-info '#(shen-thing/lang-info get-info #f) | |
| (require "reader.rkt")) | |
| (provide (all-from-out racket)) | |
| ;; NOTE: need this to get namespace thing correct. | |
| (require "runtime.rkt") |
| #lang racket | |
| (provide (rename-out [-read read] | |
| [-read-syntax read-syntax])) | |
| (require hygienic-reader-extension/extend-reader | |
| "runtime.rkt") | |
| ;; wrap-reader : (-> (-> A ... Any) (-> A ... Any)) | |
| (define (wrap-reader reader-proc) | |
| (extend-reader reader-proc extend-readtable)) | |
| ;; add-quote : (-> Syntax Syntax) | |
| (define (add-quote stx) | |
| (datum->syntax #f (cons #'make-my-list | |
| (syntax->list stx)) | |
| stx | |
| stx)) | |
| ;; extend-readtable : (-> Readtable #:outer-scope (-> Syntax Syntax) Readtable) | |
| (define (extend-readtable rt #:outer-scope outer-scope) | |
| (make-readtable rt | |
| #\[ 'terminating-macro (bracket-proc outer-scope rt))) | |
| ;; bracket-proc : (-> (-> Syntax Syntax) Readtable-Proc) | |
| (define ((bracket-proc outer-scope rt) c in src ln col pos) | |
| (hygienic-app add-quote (read-syntax/recursive src in c rt) | |
| #:outer-scope outer-scope)) | |
| (define -read (wrap-reader read)) | |
| (define -read-syntax (wrap-reader read-syntax)) |
| #lang racket | |
| (provide (struct-out my-list) | |
| make-my-list) | |
| (struct my-list (content) #:transparent) | |
| (define (make-my-list . xs) | |
| (my-list xs)) |
| #lang shen-thing | |
| [(+ 1 1) 3 4] | |
| (let ((my-list values) | |
| (make-my-list values)) | |
| [(+ 1 1) 3 4]) |