Clojure: garantir a integridade dos dados ao criar um registro a partir de um mapa?

Estou aprendendo o Clojure e gostando, mas encontro uma inconsistência nos registros que me intriga: por que o construtor de mapas padrão (map-> Whatever) não verifica a integridade dos dados ao criar um novo registro? Por exemplo:

user=> (defrecord Person [first-name last-name])
#<Class@46ffda99 user.Person>
user=> (map->Person {:first-name "Rich" :last-name "Hickey"})
#user.Person {:first-name "Rich" :last-name "Hickey"}
user=> (map->Person {:first-game "Rich" :last-name "Hickey"})
#user.Person {:first-game "Rich" :first-name nil :last-name "Hickey"}

Acredito que o Mapa não é necessário para definir todos os campos na definição de Registro e também é permitido conter campos extras que não fazem parte da definição de Registro. Também entendo que posso definir meu próprio construtor que envolve o construtor padrão e acho que um:post A condição pode ser usada para verificar a criação de registros correta (e abrangente) (não foi bem-sucedida em fazer com que isso funcionasse).

Minha pergunta é: Existe uma maneira idiomática do Clojure para verificar dados durante a construção de registros de um mapa? E há algo que estou perdendo aqui sobre a Records?

Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion