typed-racket/typed-racket-test/succeed/aliasing-tests.rkt
2014-12-22 12:35:30 -05:00

42 lines
1.1 KiB
Racket

#lang typed/racket
;; This checks that restrict can successfully update
;; by unfolding recursive definitions and structurally updating
;; down car/cdr paths
(define: (number-of-macro-definitions [expr : Sexp]) : Number
(match expr
[`(define-syntaxes (,s . ,z ). ,_ ) ;`(define-syntaxes (,s ...) ,_ ...)
(if (and (list? expr) (list? z))
(length (cons s z));;s -> cadr expr
(error "corrupted file"))]
[_ 0]))
(define: (num-of-define-syntax [exprs : (Listof Sexp)]) : Number
(foldl (lambda: ([t : Sexp] [r : Number]) (+ (number-of-macro-definitions t) r)) 0 exprs))
(struct snafu ([x : Number]))
#;(define (foo [f : snafu]) : Integer ;; doesn't (i.e. shouldn't) typecheck
(if (exact-integer? (snafu-x f))
(snafu-x f)
42))
#;(define (goo [f : snafu]) : Integer ;; doesn't (i.e. shouldn't) typecheck
(let ([n (snafu-x f)])
(if (exact-integer? n)
(snafu-x f)
42)))
(define (bar [f : snafu]) : Integer
(let ([n (snafu-x f)])
(if (exact-integer? n)
n
42)))
(define (baz [f : snafu]) : Integer
(let ([n (snafu-x f)])
(if (exact-integer? (snafu-x f))
n
42)))