(define (bind-data-types name constructors)
(map (lambda (xs)
(list 'bind-type
(string->symbol
(string-append (symbol->string name)
"_data_"
(symbol->string (car xs))))
(string->symbol
(string-append "<"
(if (null? (cdr xs))
"i64"
(string-join
(map (lambda (x)
(symbol->string x))
(cdr xs))
","))
">"))
`(printer? . #f)))
constructors))