    with the widget as first parameter and the given additional parameters"
   [map key & parameters]
   `(((~map :handler) ~key) ~map ~@parameters))
-
-(defmacro map!
-  "Just like map, but not lazy."
-  [f & colls]
-   `(seq (map ~f ~@colls)))
 
 
 ;;;

;;;


(defmacro lambda
  "Takes the free argument as first parameter and the function value as
    following parameters as function body, i.e.


     ( lambda (x y) (do (print x) (* x y)) ) 

    will produce a function that takes 2 parameters, prints the first one
    and returns the product of them.
   " 
  [parameter & body]
  `(fn [~@parameter] ~@body ))

(defmacro rho
  "Takes an block that defines a function by omitting its last parameter

  `(fn mapper# [tree#]
     (let [root# (~mk (first tree#))
            childs# (rest tree#)]
       (doseq [x# childs#] (~do-add root# (mapper# x#)))
       root#)))

(defmacro do-map-tree*
  "Maps a named list tree using the given functions to a new tree structure,
