(define (constructor-name-and-type n type constructor)
(let* ((name (symbol->string (car constructor)))
(types (string-join (map (lambda (x) (symbol->string x)) (cdr constructor)) ",")))
;; (println 'name name 'types types)
(string->symbol (string-append name ":[" (symbol->string type)
(if (string=? types "") "*" "*,")
types "]*"))))