I know this situation might not be general.
So I extended beicon.core/Observable to implement the IFn interface. But this led to problems in the arrangement of my arguments when using zip. Looking through the source code I discovered, that only fork-join and zip check if their first argument is a function before proceeding. I would like to suggest changing it to a variadic function(not sure if that's correct). Something like this
(defn zip
([& items].....)
([selector & items...........]))