lightning magic is a data structure that represents everything you need to create arbitrarily modified versions of tree structures. zippers print and read just fine , because they are the right values and do not require any state
"" pr-str "deserialize" read
:
user> (zip/vector-zip [[1 [2]][3][4]])
[[[1 [2]] [3] [4]] nil]
user> (def s (zip/vector-zip [[1 [2]][3][4]]))
#'user/s
user> s
[[[1 [2]] [3] [4]] nil]
:
user> (def serialized-s (pr-str (zip/next s)))
user> serialized-s
"[[1 [2]] {:l [], :pnodes [[[1 [2]] [3] [4]]], :ppath nil, :r ([3] [4])}]"
:
user> (def deserialized-s (read-string "[[1 [2]] {:l [], :pnodes [[[1 [2]] [3] [4]]], :ppath nil, :r ([3] [4])}]"))
- :
user> (zip/root deserialized-s)
[[1 [2]] [3] [4]]