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

20 lines
562 B
Racket

#lang typed/racket
(define stop-value (gensym))
(: an-alist : (All (A B) (Listof (Pair A B)) -> (Rec R (-> (values (-> (values A B)) (-> R))))))
(define (an-alist lst)
(lambda: ()
(if (null? lst) (raise stop-value)
(let ([first (car lst)]
[rest (cdr lst)])
(values
(lambda: () (values (car first) (cdr first)))
(lambda: () (an-alist rest)))))))
(define alist (an-alist (list (cons 1 2) (cons 3 4) (cons 5 6))))
(call-with-values alist values) ; this works
(call-with-values alist (λ (e a) a))