Como escrever o protocolo monoid no Clojure?

O seguinte não funciona, por razões óbvias.

(defprotocol Monoid
  (mappend [a b])
  (mzero []))

mzero tem zero argumentos, e os métodos de argumento zero não são permitidos (ou não fazem sentido) nos protocolos. Em Haskell ou Scala, onde o despacho é baseado em tipo e não em valor, isso não é um problema.

Qual seria a maneira correta de conceituar e escreverMonoid protocolo no Clojure?

questionAnswers(1)

yourAnswerToTheQuestion