IFn

protocolsince v0.0-971 clojure.lang/IFnEdit
implemented for BlackNode Keyword MapEntry MetaFn MultiFn ObjMap PersistentArrayMap PersistentHashMap PersistentHashSet PersistentTreeMap PersistentTreeSet PersistentVector RedNode Subvec Symbol TransientArrayMap TransientHashMap TransientHashSet TransientVector Var

Source docstring:
Protocol for adding the ability to invoke an object as a function.
  For example, a vector can also be used to look up a value:
  ([1 2 3 4] 1) => 2
Source code @ clojurescript:src/main/cljs/cljs/core.cljs
(defprotocol IFn
  (-invoke
    [this]
    [this a]
    [this a b]
    [this a b c]
    [this a b c d]
    [this a b c d e]
    [this a b c d e f]
    [this a b c d e f g]
    [this a b c d e f g h]
    [this a b c d e f g h i]
    [this a b c d e f g h i j]
    [this a b c d e f g h i j k]
    [this a b c d e f g h i j k l]
    [this a b c d e f g h i j k l m]
    [this a b c d e f g h i j k l m n]
    [this a b c d e f g h i j k l m n o]
    [this a b c d e f g h i j k l m n o p]
    [this a b c d e f g h i j k l m n o p q]
    [this a b c d e f g h i j k l m n o p q r]
    [this a b c d e f g h i j k l m n o p q r s]
    [this a b c d e f g h i j k l m n o p q r s t]
    [this a b c d e f g h i j k l m n o p q r s t rest]))