     (= idx 0)
     (while (!= result.length coll.length)
       (brackets
-        (call result.push (call func ([] coll idx)))
+        (result.push (func ([] coll idx)))
         (+= idx 1)))
     (return result)))
 	
 	(defmacro varname (arglist somevar)
-		(return (list "console.log" (+ "'" somevar "'"))))
+		(return (list "console.log" (+ '"' somevar '"'))))
 
   (defmacro myfor (arglist idx start end body)
     (return 

	  (return ([0] list))))

	(= rest (function (arglist list)
	  (return (call list.slice 1))))
  
  (= map (function (arglist func coll)
    (var result idx)

          (brackets
            ~body
            (+= ~idx ~1))))))

  (= cons (function (arglist head tail)
    (return (head.concat tail))))
  
  (defmacro turnintolist (arglist body)
    (return
      (cons (list "list") (rest body))))

  (defmacro whenlet (arglist somevar cond body)
    (return 
      `(if ~cond
          (do
            (= ~somevar ~cond)
            ~body))))

  (= islist (function (arglist obj)
    (return (instanceof obj Array))))

  (= die (function (arglist body)
    (console.log "Constraint failed at " body)))
  
  (defmacro constrain (arglist somevar cond body)
    (if (! (islist body)) 
      (return body)
      (if (== (first body) "=")
        (return (list "do" body
                   (list "if" cond (list "die" (+ '"(' (body.join " ") ')"')))))
        (return (map (function (arglist x) (return (constrain somevar cond x))) body)))))
"""
###
###

###
  (defmacro myfor (arglist idx start end body)
