<html><head><metacharset="UTF-8"/><linkhref="css/default.css"rel="stylesheet"type="text/css"/><scriptsrc="js/jquery.min.js"type="text/javascript"></script><scriptsrc="js/page_effects.js"type="text/javascript"></script><title>com.rpl.specter documentation</title></head><body><divid="header"><h2>Generated by <ahref="https://github.com/weavejester/codox">Codox</a></h2><h1><ahref="index.html"><spanclass="project-title"><spanclass="project-name">Specter</span><spanclass="project-version">0.11.0</span></span></a></h1></div><divclass="sidebar primary"><h3class="no-link"><spanclass="inner">Project</span></h3><ulclass="index-link"><liclass="depth-1 "><ahref="index.html"><divclass="inner">Index</div></a></li></ul><h3class="no-link"><spanclass="inner">Namespaces</span></h3><ul><liclass="depth-1"><divclass="no-link"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>com</span></div></div></li><liclass="depth-2"><divclass="no-link"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>rpl</span></div></div></li><liclass="depth-3 current"><ahref="com.rpl.specter.html"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>specter</span></div></a></li><liclass="depth-4 branch"><ahref="com.rpl.specter.macros.html"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>macros</span></div></a></li><liclass="depth-4"><ahref="com.rpl.specter.zipper.html"><divclass="inner"><spanclass="tree"><spanclass="top"></span><spanclass="bottom"></span></span><span>zipper</span></div></a></li></ul></div><divclass="sidebar secondary"><h3><ahref="#top"><spanclass="inner">Public Vars</span></a></h3><ul><liclass="depth-1"><ahref="com.rpl.specter.html#var-ALL"><divclass="inner"><span>ALL</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-ATOM"><divclass="inner"><span>ATOM</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-BEGINNING"><divclass="inner"><span>BEGINNING</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-bind-params*"><divclass="inner"><span>bind-params*</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-codewalker"><divclass="inner"><span>codewalker</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-collect"><divclass="inner"><span>collect</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-collect-one"><divclass="inner"><span>collect-one</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-comp-paths"><divclass="inner"><span>comp-paths</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-compiled-replace-in"><divclass="inner"><span>compiled-replace-in</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-compiled-select"><divclass="inner"><span>compiled-select</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-compiled-select-first"><divclass="inner"><span>compiled-select-first</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-compiled-select-one"><divclass="inner"><span>compiled-select-one</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-compiled-select-one.21"><divclass="inner"><span>compiled-select-one!</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-compiled-setval"><divclass="inner"><span>compiled-setval</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-compiled-transform"><divclass="inner"><span>compiled-transform</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-cond-path"><divclass="inner"><span>cond-path</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-continue-then-stay"><divclass="inner"><span>continue-then-stay</span></div></a></li><liclass="depth-1"><ahref="com.rpl.specter.html#var-continuous
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L314">view source</a></div></div><divclass="public anchor"id="var-BEGINNING"><h3>BEGINNING</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L202">view source</a></div></div><divclass="public anchor"id="var-bind-params*"><h3>bind-params*</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Takes a compiled path that needs late-bound params and supplies it with
params. The return value is an executable selector.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L111">view source</a></div></div><divclass="public anchor"id="var-codewalker"><h3>codewalker</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L245">view source</a></div></div><divclass="public anchor"id="var-collect"><h3>collect</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L427">view source</a></div></div><divclass="public anchor"id="var-collect-one"><h3>collect-one</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L433">view source</a></div></div><divclass="public anchor"id="var-comp-paths"><h3>comp-paths</h3><divclass="usage"><code>(comp-paths & paths)</code></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L26">view source</a></div></div><divclass="public anchor"id="var-compiled-replace-in"><h3>compiled-replace-in</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Version of replace-in that takes in a path precompiled with comp-paths
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L97">view source</a></div></div><divclass="public anchor"id="var-compiled-select"><h3>compiled-select</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Version of select that takes in a path pre-compiled with comp-paths
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L43">view source</a></div></div><divclass="public anchor"id="var-compiled-select-first"><h3>compiled-select-first</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Version of select-first that takes in a path pre-compiled with comp-paths
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L68">view source</a></div></div><divclass="public anchor"id="var-compiled-select-one"><h3>compiled-select-one</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Version of select-one that takes in a path pre-compiled with comp-paths
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L52">view source</a></div></div><divclass="public anchor"id="var-compiled-select-one.21"><h3>compiled-select-one!</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Version of select-one! that takes in a path pre-compiled with comp-paths
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L60">view source</a></div></div><divclass="public anchor"id="var-compiled-setval"><h3>compiled-setval</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Version of setval that takes in a path precompiled with comp-paths
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L89">view source</a></div></div><divclass="public anchor"id="var-compiled-transform"><h3>compiled-transform</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Version of transform that takes in a path pre-compiled with comp-paths
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L80">view source</a></div></div><divclass="public anchor"id="var-cond-path"><h3>cond-path</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Takes in alternating cond-path path cond-path path...
were declared.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L452">view source</a></div></div><divclass="public anchor"id="var-continue-then-stay"><h3>continue-then-stay</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to the provided path and then to the current element. This can be used
to implement post-order traversal.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L506">view source</a></div></div><divclass="public anchor"id="var-continuous-subseqs"><h3>continuous-subseqs</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to every continuous subsequence of elements matching `pred`
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L184">view source</a></div></div><divclass="public anchor"id="var-END"><h3>END</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L204">view source</a></div></div><divclass="public anchor"id="var-filterer"><h3>filterer</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to a view of the current sequence that only contains elements that
were declared.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L359">view source</a></div></div><divclass="public anchor"id="var-FIRST"><h3>FIRST</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L160">view source</a></div></div><divclass="public anchor"id="var-if-path"><h3>if-path</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Like cond-path, but with if semantics.
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L475">view source</a></div></div><divclass="public anchor"id="var-keypath"><h3>keypath</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to the specified key, navigating to nil if it does not exist.
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L274">view source</a></div></div><divclass="public anchor"id="var-LAST"><h3>LAST</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L158">view source</a></div></div><divclass="public anchor"id="var-multi-path"><h3>multi-path</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">A path that branches on multiple paths. For updates,
applies updates to the paths in order.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L481">view source</a></div></div><divclass="public anchor"id="var-must"><h3>must</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to the key only if it exists in the map.
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L284">view source</a></div></div><divclass="public anchor"id="var-must-cache-paths.21"><h3>must-cache-paths!</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Mandate that operations that do inline path factoring and compilation
where a navigator is expected.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L29">view source</a></div></div><divclass="public anchor"id="var-NIL-.3ELIST"><h3>NIL->LIST</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L424">view source</a></div></div><divclass="public anchor"id="var-NIL-.3ESET"><h3>NIL->SET</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L423">view source</a></div></div><divclass="public anchor"id="var-nil-.3Eval"><h3>nil->val</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to the provided val if the structure is nil. Otherwise it stays
navigated at the structure.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L413">view source</a></div></div><divclass="public anchor"id="var-NIL-.3EVECTOR"><h3>NIL->VECTOR</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L425">view source</a></div></div><divclass="public anchor"id="var-not-selected.3F"><h3>not-selected?</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L346">view source</a></div></div><divclass="public anchor"id="var-params-reset"><h3>params-reset</h3><divclass="usage"><code>(params-reset params-path)</code></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L116">view source</a></div></div><divclass="public anchor"id="var-parser"><h3>parser</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L307">view source</a></div></div><divclass="public anchor"id="var-pred"><h3>pred</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Keeps the element only if it matches the supplied predicate. This is the
late-bound parameterized version of using a function directly in a path.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L406">view source</a></div></div><divclass="public anchor"id="var-putval"><h3>putval</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Adds an external value to the collected vals. Useful when additional arguments
of what was transformed in the data structure.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L100">view source</a></div></div><divclass="public anchor"id="var-select*"><h3>select*</h3><divclass="usage"><code>(select* path structure)</code></div><divclass="doc"><preclass="plaintext">Navigates to and returns a sequence of all the elements specified by the path.
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L46">view source</a></div></div><divclass="public anchor"id="var-select-first*"><h3>select-first*</h3><divclass="usage"><code>(select-first* path structure)</code></div><divclass="doc"><preclass="plaintext">Returns first element found. Not any more efficient than select, just a convenience
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L72">view source</a></div></div><divclass="public anchor"id="var-select-one.21*"><h3>select-one!*</h3><divclass="usage"><code>(select-one!* path structure)</code></div><divclass="doc"><preclass="plaintext">Returns exactly one element, throws exception if zero or multiple elements found
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L63">view source</a></div></div><divclass="public anchor"id="var-select-one*"><h3>select-one*</h3><divclass="usage"><code>(select-one* path structure)</code></div><divclass="doc"><preclass="plaintext">Like select, but returns either one element or nil. Throws exception if multiple elements found
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L55">view source</a></div></div><divclass="public anchor"id="var-selected.3F"><h3>selected?</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Filters the current value based on whether a path finds anything.
were declared.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L325">view source</a></div></div><divclass="public anchor"id="var-setval*"><h3>setval*</h3><divclass="usage"><code>(setval* path val structure)</code></div><divclass="doc"><preclass="plaintext">Navigates to each value specified by the path and replaces it by val
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L92">view source</a></div></div><divclass="public anchor"id="var-srange"><h3>srange</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to the subsequence bound by the indexes start (inclusive)
and end (exclusive)</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L173">view source</a></div></div><divclass="public anchor"id="var-srange-dynamic"><h3>srange-dynamic</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Uses start-fn and end-fn to determine the bounds of the subsequence
to select when navigating. Each function takes in the structure as input.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L162">view source</a></div></div><divclass="public anchor"id="var-STAY"><h3>STAY</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Stays navigated at the current point. Essentially a no-op navigator.
</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L145">view source</a></div></div><divclass="public anchor"id="var-stay-then-continue"><h3>stay-then-continue</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to the current element and then navigates via the provided path.
This can be used to implement pre-order traversal.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L500">view source</a></div></div><divclass="public anchor"id="var-STOP"><h3>STOP</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Stops navigation at this point. For selection returns nothing and for
transformation returns the structure unchanged</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L134">view source</a></div></div><divclass="public anchor"id="var-submap"><h3>submap</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to the specified submap (using select-keys).
value of the submap.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L222">view source</a></div></div><divclass="public anchor"id="var-subselect"><h3>subselect</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to a sequence that contains the results of (select ...),
"transform".</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L253">view source</a></div></div><divclass="public anchor"id="var-subset"><h3>subset</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to the specified subset (by taking an intersection).
new value of the subset.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L206">view source</a></div></div><divclass="public anchor"id="var-transform*"><h3>transform*</h3><divclass="usage"><code>(transform* path transform-fn structure)</code></div><divclass="doc"><preclass="plaintext">Navigates to each value specified by the path and replaces it by the result of running
the transform-fn on it</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L83">view source</a></div></div><divclass="public anchor"id="var-transformed"><h3>transformed</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to a view of the current value by transforming it with the
were declared.</pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L370">view source</a></div></div><divclass="public anchor"id="var-VAL"><h3>VAL</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div><divclass="src-link"><ahref="https://github.com/nathanmarz/specter/tree/0.11.0/src/clj/com/rpl/specter.cljx#L156">view source</a></div></div><divclass="public anchor"id="var-view"><h3>view</h3><divclass="usage"></div><divclass="doc"><preclass="plaintext">Navigates to result of running `afn` on the currently navigated value.