      (~(symbol (str method "LE")) ~@args)
      (~(symbol (str method "BE")) ~@args)))
 
-(defn without-hint
-  "Removes the type hint metadata from `value`."
+(defn without-tag
+  "Removes the `tag` metadata from `value`."
   [value]
   (vary-meta value dissoc :tag))
 
-(defn without-primitive-hint
-  "Removes the primitive type hint metadata from `value`."
+(defn without-primitive-tag
+  "Removes the primitive `tag` metadata from `value`."
   [value]
   (vary-meta value (fn [{:keys [tag] :as meta}]
                      (cond-> meta

    (if (compiler.util/cljs?)
      `(defprotocol ~interface-name
         ~@(map (fn [{:keys [op-name args docs]}]
                  `(~(without-hint op-name)
                    ~(into [(gensym "this")] (map without-hint args))
                    ~@(when docs [docs])))
                ops))
      `(do (definterface ~interface-name

  [value]
  (or (symbol? value) (coll? value)))

(defn with-runtime-tag
  "Takes the `tag` metadata of `value` and returns a piece of code which reapplies it to what `value` evaluates to."
  [value]
  `(if-not (can-have-metadata? ~value)
     ~value
