   `(.. ~(eval left)
        (join ~(eval right)
              `(key-value-mapper ~map-fn)
-             `(reify ValueJoiner
-                (apply [_ left# right#]
-                  (~join-fn left# right#))))))
+             `(value-joiner ~join-fn))))
 
 (defmethod eval-op :map
   [_ map-fn stream]

  `(.. ~(eval left)
       ~(remove nil? (apply list 'outerJoin
                            (eval right)
                            `(reify ValueJoiner
                               (apply [_ left# right#]
                                 (~join-fn left# right#)))
                            args))))

(defmethod eval-op :peek

  `(.. ~(eval left)
       ~(remove nil? (list 'join
                           (eval right)
                           `(value-joiner ~join-fn)
                           args))))

(defmethod eval-op :join-global
