extend protocol defrecord reify