- (define-abstract-type TYPE type? (Constructor (arg arg? ...) ...) .... (with ((proc arg ...) xpr ....) ....) (printer (lambda (obj out) xpr ....)) .. (reader proc) ..)syntax
like define-concrete-type, but the variant constructors Constructor .... are hidden and procedures (proc arg ...) .... are exported instead. Only those procedures have access to the variant constructors. printers and readers are optional, but they need access to the variant constructors, so they must be defined here. They use define-record-printer and define-reader-ctor.