#lang typed/racket

(: f (All (A B ...) (A ... B -> (List (Boxof A) ... B))))
(define (f . args)
    (map (inst box A) args))

(: h (-> Nothing))
(define (h) (h))

(: g (All (A B ...) (A ... B -> (Values (Boxof A) ... B))))
(define (g . args)
   (h))


(ann ((inst f String Symbol Symbol) "c" "d") (List (Boxof String) (Boxof String)))
(lambda (x)
  (ann ((inst g String Symbol Symbol) "c" "d") (values (Boxof String) (Boxof String))))

#lang typed/racket

(: f (All (A B ...) (A ... B -> (List (Boxof A) ... B))))
(define (f . args)
    (map (inst box A) args))

(: h (-> Nothing))
(define (h) (h))

(: g (All (A B ...) (A ... B -> (Values (Boxof A) ... B))))
(define (g . args)
   (h))


(ann ((inst f String Symbol Symbol) "c" "d") (List (Boxof String) (Boxof String)))
(lambda (x)
  (ann ((inst g String Symbol Symbol) "c" "d") (values (Boxof String) (Boxof String))))
