chickadee » bindings » define-algebraic-type

(define-algebraic-type NAME Name? Constructors ....)syntax

where each Constructor, Name, is one of

 (Name (arg arg? ...) ...)
 (Name (arg arg? ...) ... args args?  ...)

The generated type, NAME, can be destructured with bind, bind-case etc. as tagged vectors with #:Name as tag.