(define-record-type <combinator-record>
    (make-combinator-record type elements)
    combinator-record?
  (type combinator-record-type)
  (elements combinator-record-elements))

(define (combinator type procedure . elements)
  (make-entity (apply procedure elements)
	       (make-combinator-record type elements)))

(define (combinator? object)
  (and (entity? object)
       (combinator-record? (entity-extra object))))

(define (combinator-procedure combinator)
  (entity-procedure combinator))

(define (combinator-type combinator)
  (combinator-record-type (entity-extra combinator)))

(define (combinator-elements combinator)
  (combinator-record-elements (entity-extra combinator)))