(fn foreach [f lst]
  `(do ,(unpack
     (icollect [_ v (ipairs lst)]
       `(,f ,v)))))

(fn foreachMulti [f lst]
  `(do ,(unpack
      (icollect [_ v (ipairs lst)]
        `(,f (table.unpack ,v))))))

{: foreach : foreachMulti}