Fork me on GitHub
#specter
<
2018-05-04
>
soulflyer02:05:50

I'm trying to use specter/zipper to create a custom zipper. I have the clojure.zip/zipper working ok, but when I attempt to wrap it using specter/zipper I get this error:

anh-front.tree> (def tz (specter-tree-zip test-tree))
#object[TypeError TypeError: anh_front.tree.specter_tree_zip.call is not a function]
nil
Heres the code, I have clojure.zip required as zip and specter.zip required as sz
(defn tree-zip
  "Returns a zipper for tree elements given a root element"
  [root]
  (zip/zipper (complement string?)
              (fn [node] (if (:expanded node)
                           (seq (:children node))))
              (fn [node children]
                (assoc node :children (and children (apply vector children))))
              root))

(def specter-tree-zip (sz/zipper tree-zip))
Any idea what I have done wrong?

nathanmarz02:05:05

@soulflyer sz/zipper returns a navigator, not a function

nathanmarz02:05:15

you use it in a path to navigate to the zipper object

nathanmarz02:05:37

e.g. (transform [specter-tree-zip sz/DOWN ...

soulflyer02:05:25

ah, that makes sense. I wrongly assumed I could just drop it in where I had used clojure.zip/zipper Thanks!