commit b23ee8fc3f36d809c4728d4c31e91c95ab20b778
parent 36c24c04b984f15eec627119c6e44ef2100162f3
Author: Stephen Chang <stchang@ccs.neu.edu>
Date: Tue, 24 Jan 2017 14:51:03 -0500
provide syntax-parse/typed-syntax as parse-typed-syntax
- but dont remove the old name
- closes #50
Diffstat:
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/turnstile/examples/mlish+adhoc.rkt b/turnstile/examples/mlish+adhoc.rkt
@@ -675,7 +675,7 @@
#:with out
(cond
[(×? #'τ_e) ;; e is tuple
- (syntax-parse/typed-syntax #'clauses
+ (parse-typed-syntax #'clauses
[([x ... (~datum ->) e_body]) ≫
#:with (~× ty ...) #'τ_e
#:fail-unless (stx-length=? #'(ty ...) #'(x ...))
@@ -689,7 +689,7 @@
(let- ([x- (acc z)] ...) e_body-))
⇒ ty_body]])]
[(List? #'τ_e) ;; e is List
- (syntax-parse/typed-syntax #'clauses
+ (parse-typed-syntax #'clauses
[([(~or (~and (~and xs [x ...]) (~parse rst (generate-temporary)))
(~and (~seq (~seq x (~datum ::)) ... rst:id) (~parse xs #'())))
(~datum ->) e_body] ...+) ≫
@@ -721,7 +721,7 @@
(let- ([x- (acc1 z)] ... [rst- (acc2 z)]) e_body-)] ...))
⇒ (⊔ ty_body ...)]])]
[else ;; e is variant
- (syntax-parse/typed-syntax #'clauses
+ (parse-typed-syntax #'clauses
[([Clause:id x:id ...
(~optional (~seq #:when e_guard) #:defaults ([e_guard #'(ext-stlc:#%datum . #t)]))
(~datum ->) e_c_un] ...+) ≫ ; un = unannotated with expected ty
diff --git a/turnstile/scribblings/reference.scrbl b/turnstile/scribblings/reference.scrbl
@@ -32,6 +32,7 @@ and then press Control-@litchar{\}.
@section{Forms}
+@; define-typed-syntax---------------------------------------------------------
@defform*[
#:literals (≫ ⊢ ⇒ ⇐ ≻ : --------)
((define-typed-syntax (name-id . pattern) ≫
@@ -179,7 +180,13 @@ attach type information to the top-level @tt{x} identifier, so the
]}
+@; parse-typed-syntax ---------------------------------------------------------
+@defform[(parse-typed-syntax stx option ... rule ...+)]{
+A @racket[syntax-parse]-like form that supports
+@racket[define-typed-syntax]-style clauses. In particular, see the
+"rule" part of @racket[define-typed-syntax]'s grammar above.}
+@; define-primop --------------------------------------------------------------
@defform*[((define-primop typed-op-id τ)
(define-primop typed-op-id : τ)
(define-primop typed-op-id op-id τ)
diff --git a/turnstile/turnstile.rkt b/turnstile/turnstile.rkt
@@ -4,7 +4,9 @@
-define-typed-syntax -define-syntax-category)
define-typed-syntax define-syntax-category
(rename-out [define-typed-syntax define-typerule])
- (for-syntax syntax-parse/typed-syntax))
+ (for-syntax syntax-parse/typed-syntax
+ (rename-out
+ [syntax-parse/typed-syntax parse-typed-syntax])))
(require (except-in (rename-in
macrotypes/typecheck