deftype and defprotocol