From 635f9370c03fae06747e93657ca8314aabe9a446 Mon Sep 17 00:00:00 2001 From: Stephen Chang Date: Thu, 4 Sep 2014 14:20:36 -0400 Subject: [PATCH] stlc + ext: - define-primop requires parens around type - define-syntax/type-rule renamed to define-typed-syntax - use 2 arg + primop instead of vararg --- stlc-tests.rkt | 11 ++++++++--- stlc-via-racket-extended.rkt | 7 ++++--- stlc.rkt | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/stlc-tests.rkt b/stlc-tests.rkt index 32d69ac..1ae958e 100644 --- a/stlc-tests.rkt +++ b/stlc-tests.rkt @@ -1,8 +1,13 @@ #lang s-exp "stlc-via-racket-extended.rkt" -((λ ([f : (Int → Int)] [x : Int]) (f x)) - (λ ([x : Int]) (+ x x 1)) +((λ ([f : (Int → Int)] [x : Int]) + (f x)) + (λ ([x : Int]) (+ x x)) 10) -((λ ([x : Int]) (+ x 1 3)) 100) +((λ ([x : Int]) (+ x 1)) 100) +((λ ([f : (Int Int → Int)] [x : Int] [y : Int]) (f x y)) + + + 100 + 200) ;; extra tests ; test #%datum extension diff --git a/stlc-via-racket-extended.rkt b/stlc-via-racket-extended.rkt index a51c41d..ff7b3ee 100644 --- a/stlc-via-racket-extended.rkt +++ b/stlc-via-racket-extended.rkt @@ -13,17 +13,18 @@ (define-literal-type-rule integer : Int) -(define-simple-syntax/type-rule +(define-primop + : (Int Int → Int)) +#;(define-simple-syntax/type-rule (+ e ...) : Int #:where (e : Int) ...) -(define-simple-syntax/type-rule +(define-typed-syntax (λ ([x : τ] ...) e) : (τ ... → τ_body) #:where (let τ_body := (typeof e))) -(define-simple-syntax/type-rule +(define-typed-syntax (#%app f e ...) : τ2 #:where (let (τ1 ... → τ2) := (typeof f)) diff --git a/stlc.rkt b/stlc.rkt index f384eab..a4c603e 100644 --- a/stlc.rkt +++ b/stlc.rkt @@ -26,7 +26,7 @@ (syntax/loc stx (#%datum . x))])) ;; op -(define-primop + : (Int ... → Int)) +(define-primop + : (Int Int → Int)) ;; lambda (define-syntax (λ/tc stx)