change observer-fn interface to take a seq