   (tagged-any \"foo\" prn)
   (tagged-all [\"foo\" \"bar\"] prn)"
   [tags & children]
-  (if (coll? tags)
-    (let [required (set tags)]
-      (fn stream [event]
-        (when (some required (:tags event))
-          (call-rescue event children)
-          true)))
-
+  (let [tag-coll (flatten [tags])]
     (fn stream [event]
-      (when (member? tags (:tags event))
+      (when (tagged-any? tag-coll event)
         (call-rescue event children)
         true))))
 

  (tagged-all \"foo\" prn)
  (tagged-all [\"foo\" \"bar\"] prn)"
  [tags & children]
  (if (coll? tags)
    (fn stream [event]
      (when (set/subset? (set tags) (set (:tags event)))
        (call-rescue event children)
        true))

    (fn stream [event]
      (when (member? tags (:tags event))
        (call-rescue event children)
        true))))

(defn tagged-any
  "Passes on events where any of tags are present. This stream returns true if

      (call-rescue event children)
      true)))

(defn tagged-all?
  "Predicate function to check if a collection of tags is
  present in the tags of event."
  [tags event]
  (set/subset? (set tags) (set (:tags event))))

(defn tagged-all
  "Passes on events where all tags are present. This stream returns true if an
  event it receives matches those tags, nil otherwise.
