typed-racket/typed-racket-test/succeed/refinements-expected-type1.rkt
2017-11-05 21:10:58 -05:00

44 lines
1.4 KiB
Racket

;; see Typed Racket GH issue #640
#lang typed/racket #:with-refinements
(: lyst : (-> ([arg : Integer])
(Refine [result : (List Integer)]
(= (car result) arg))))
(define (lyst arg)
(define result (list arg))
(assert (= (car result) arg))
result)
(: lyst-car : (-> ([lyst : (List Integer)])
(Refine [result : Integer]
(= result (car lyst)))))
(define (lyst-car lst)
(car lst))
(: lyst+ : (-> ([a : (List Integer)]
[b : (List Integer)])
(Refine [result : (List Integer)]
(= (car result) (+ (car a) (car b))))))
(define (lyst+ a b)
(lyst (+ (lyst-car a) (lyst-car b))))
(: lyst1+ : (-> ([a : (List Integer)]
[b : (List Integer)])
(Refine [result : (List Integer)]
(= (car result) (+ (car a) (car b))))))
(define (lyst1+ a b)
(define res (lyst (+ (lyst-car a) (lyst-car b))))
res)
(: lyst2+ : (-> ([a : (List Integer)]
[b : (List Integer)])
(values (Refine [result : (List Integer)]
(= (car result) (+ (car a) (car b))))
(Refine [result : (List Integer)]
(= (car result) (+ (car a) (car b)))))))
(define (lyst2+ a b)
(values (lyst (+ (lyst-car a) (lyst-car b)))
(lyst (+ (lyst-car a) (lyst-car b)))))