(bar Bool))))
'((foo (A foo constructor)
abs Int (abs Bool A))
- (foo~0 (A foo 0) abs A Int)
- (foo~1 (A foo 1) abs A Bool)
+ (foo~0 (A foo 0 Int) abs A Int)
+ (foo~1 (A foo 1 Bool) abs A Bool)
(bar (A bar constructor) abs Bool A)
- (bar~0 (A bar 0) abs A Bool)))
+ (bar~0 (A bar 0 Bool) abs A Bool)))
(test (data-tors-type-env
'(A . ((foo Int Bool)
(test-prog '((data A [foo Int])
(let ([x (foo 42)])
(let ([(foo y) x])
- (+ 1 y))))
- 43)
+ (+ 2 y))))
+ 44)
+
+(test-prog '((data A [foo Bool Int Int])
+ (let ([x (foo (= 2 1) 123 45)]
+ [(foo a b c) x])
+ (+ b c)))
+ (+ 123 45))
(test-prog '((data A [foo Int])
(data B [bar A])
(let ([(bar (foo x)) (bar (foo 42))])
x))
42)
+
+(test-prog '((data Foo [a] [b] [c])
+ (let ([x b])
+ (case x
+ [a 1]
+ [b 2]
+ [c 3])))
+ 2)
+