(loop [coll (seq coll) foos [] last-bar nil]
(if coll
(let [x (first coll)
n (next coll)]
(cond
(foo? x) (recur n (conj foos (assoc-event x last-bar)) last-bar)
(bar? x) (recur n foos x)
:else (recur n foos last-bar))))
foos))