model macro is somewhat syntactically like defrecord