         (if (or (string? tag) (and (symbol? tag) (go-types (name tag))))
           tag
           ((merge '{number "float64" boolean "bool" array "[]interface{}"}
-                  (when allow-native?
+                  (when native-string?
                     {'string "string"})
                   {'seq (go-core "CljsCoreISeq") 'function (go-core "CljsCoreIFn")})
            tag "interface{}")))))

                                        ;(emits " = (typeof " mname " != 'undefined') ? " mname " : undefined")
        (when-not (= :expr (:context env)) (emitln))))))

(defn typed-params [params allow-native?]
  (for [param params]
    (str (emit-str param) " " (-> param :tag (go-type allow-native?)))))

(defn emit-fn-signature [params ret-tag allow-native?]
  (emits "(" (comma-sep (typed-params params allow-native?)) ") " (go-type ret-tag allow-native?)))

(defn assign-to-blank [bindings]
  (when-let [bindings (seq (remove '#{_} (map munge bindings)))]


(defn go-type
  ([tag] (go-type tag true))
  ([tag native-string?]
      (if-let [ns (and (symbol? tag) (namespace tag))]
        (let [ns (symbol ns)
              goog? (= 'goog ns)
