An implementation of Clojure like protocols in Javascript