improvement: define-constructor uses &allow-other-keys