   [ & body ]
   `(fn [x#] (~@body x#)))
 
-(defmacro *comp
+(defn *comp
   "Takes some functions and returns the covariant function composition
     of them"
   [& fns]
-  `(comp ~@(reverse fns)))
+  (apply comp (reverse fns)))
 
 (defmacro dosync-wait
   "Returns a dosync block that will block until the operation

;;;


(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

   with the widget as first parameter and the given additional parameters"
  [map key & parameters]
  `(((~map :handler) ~key) ~map ~@parameters))


;;;
