;; polymorphic variant lists
(define (+ a b)
(%%cexp (int int -> int) "%0+%1" a b))
(define (length l)
(let loop ((l l)
(n 0))
(vcase l
((:nil) n)
((:cons _ tl)
(loop tl (+ n 1))))))
(let ((l (:cons 1 (:cons 2 (:cons 3 (:nil))))))
(length l))