   [u v]
   (fn unify-goal [{:keys [s-map] :as state}]
     (if-let [s-map' (unify u v s-map)]
-      (stream (with-s-map state s-map'))
+      (make-stream (with-s-map state s-map'))
       empty-stream)))
 
 (defn call-fresh

  with `delay-goal`, so you don't need to worry about adding them yourself.

  (This does have a performance cost, but speed is not the point of this port)"
  ([g] `(delay-goal ~g))
  ([g & gs] `(ldisj (delay-goal ~g) (ldisj+ ~@gs))))

(defmacro lconj+
  "Like `ldisj+`, but for `lconj`."
  ([g] `(delay-goal ~g))
  ([g & gs] `(lconj (delay-goal ~g) (lconj+ ~@gs))))




;; mapcat-stream is somewhat simpler.
;;
;;     clojure.lang.IFn
;;     (mapcat-stream [stream g] #(mapcat-stream (stream) g))
;;
;; The basic concept here is pretty straightforward: make a new thunk which,
;; when executed later, will do some work and then mapcat `g` over the result.
