         attr-map (let [m (first args)]
                    (when (map? m) m))
         args (if attr-map (rest args) args)
-        private? (:private attr-map)
+        private? (or (= 'defn- (first form))
+                     (:private meta-)
+                     (:private attr-map))
         doc-forms (cond-> []
                     docstring (conj docstring)
                     attr-map (conj attr-map))

  [form]
  (let [name- (second form)
        m (meta name-)
        docstring (fix-docstring (:doc m))
        signatures (when-let [arglists (:arglists m)]
                     (when (= 'quote (first arglists))
                       (second arglists)))]
    {:docstring docstring
     :signature signatures
     :type "function"}))

(defn parse-var
  [form]
  (let [name- (second form)
        m (meta name-)
        docstring (fix-docstring (:doc m))
        dynamic? (:dynamic m)]
    {:docstring docstring
     :type (if dynamic? "dynamic var" "var")}))

(defn parse-defcurried
  [form]
  (let [[_ name- docstring attr-map args] form
        cargs (vec (butlast args))
        signatures [cargs args]]
    {:docstring docstring
     :signature signatures
     :type "function"}))

(defn parse-protocol-method
  [form]

                         :head (take 2 form)
                         :doc doc-forms
                         :sig-body args})]
    (when (or *parse-private-defs?*
              (not private?))
      {:expected-docs expected-docs
       :docstring (fix-docstring docstring)
       :signature signatures
