       (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.

  (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)))

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


  (tagged-all \"foo\" prn)
  (tagged-all [\"foo\" \"bar\"] prn)"
  [tags & children]
  (let [tag-coll (flatten [tags])]
    (fn stream [event]
      (when (tagged-all? tag-coll event)
        (call-rescue event children)
        true))))

(defn tagged-any?
  "Predicate function to check if any of a collection of tags
  are present in the tags of event."
  [tags event]
  (some (set tags) (:tags event)))

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