The following does not work, for obvious reasons.
(defprotocol Monoid
(mappend [a b])
(mzero []))
mzero
has zero arguments, and zero argument methods are not allowed (or do not make sense) in protocols. In Haskell or Scala, where the dispatch is type-based rather than value-based, this is not a problem.
What would be the correct way to conceptualize and write Monoid
protocol in Clojure?