title: Why does Clojure have 5 ways to define a class instead of just one?
body: <p>Clojure has gen-class, reify, proxy and also deftype and defrecord to define new class-like datatypes. For a language that values syntactic simplicity and abhors unnecessary complexity, it seems like an aberration.
  Could someone explain why it is so? Could Common Lisp-style defclass have sufficed?</p>