Furthermore defprotocol is one of those pseudo-functions, like def, whose main purpose is a side-effect; def has the side-effect of interning a var (thus altering the environment), and defprotocol ...