Index: src/clj/clojure/core.clj
===================================================================
--- src/clj/clojure/core.clj	(revision 1188)
+++ src/clj/clojure/core.clj	(working copy)
@@ -183,6 +183,7 @@
     name (fn ([params* ] exprs*)+)) with any doc-string or attrs added
     to the var metadata"
     :arglists '([name doc-string? attr-map? [params*] body]
+                [name attr-map? [params*] doc-string body]
                 [name doc-string? attr-map? ([params*] body)+ attr-map?])}
  defn (fn defn [name & fdecl]
         (let [m (if (string? (first fdecl))
@@ -197,6 +198,13 @@
               fdecl (if (map? (first fdecl))
                       (rest fdecl)
                       fdecl)
+              m (if (clojure.lang.Numbers/lt 2 (clojure.lang.RT/length fdecl))
+                  (if (vector? (first fdecl))
+                    (if (string? (second fdecl))
+                      (if (m :doc) m (assoc m :doc (second fdecl)))
+                      m)
+                    m)
+                  m)
               fdecl (if (vector? (first fdecl))
                       (list fdecl)
                       fdecl)
