   (assert (= :a-return (foo :a)))
   (assert (= :default-return (foo 1)))
 
-
   ;; (defmulti area :Shape)
   ;; (defn rect [wd ht] {:Shape :Rect :wd wd :ht ht})
   ;; (defn circle [radius] {:Shape :Circle :radius radius})

  supplied defaults to, and modifies, the global hierarchy."
  ([tag parent]
     ;; (alter-var-root #'global-hierarchy underive tag parent)
     (swap! global-hierarchy derive tag parent) nil)
  ([h tag parent]
    (let [parentMap (:parents h)
	  childsParents (if (parentMap tag)

      (reset-cache method-cache method-table cached-hierarchy hierarchy))
    (if-let [target-fn (@method-cache dispatch-val)]
      target-fn
      (if-let [target-fn (find-and-cache-best-method name dispatch-val hierarchy method-table
						     prefer-table method-cache cached-hierarchy)]
	target-fn
	(@method-table default-dispatch-val))))
  
