typed-racket/typed-racket-test/succeed/pr14582.rkt
2014-12-16 10:07:25 -05:00

35 lines
659 B
Racket

#lang typed/racket/base
(define-type CodeOfBoolean (Code Boolean))
(define-type CodeOfInteger (Code Integer))
(define-type CodeOfAny
(U CodeOfInteger
CodeOfBoolean))
(define-type (Code Type)
(U Type
(If Type)
(Begin Type)))
(struct (Type) If
([cond : CodeOfBoolean]
[then : (Code Type)]
[else : (Code Type)])
#:transparent)
(define-type (ListEndingIn ListType EndType)
(U (Pair EndType Null)
(Pair ListType (ListEndingIn ListType EndType))))
(struct (Type) Begin
([exprs : (ListEndingIn CodeOfAny (Code Type))]))
(define QuotedCode : CodeOfInteger
(If #t
1
(Begin
(list 2 #f (If #t 3 4)))))