Use declare for forward declarations
if-let
(every? identity (map f xs)) is equivalent to (every? f xs)
(if x y false) is equivalent to (and x y)
Declare
Dont need the extra parens for these defns
Missed an if-let
Maps can be used as functions
This is arguable, but for simple datastructures I find it clearer to just manipulate them in place
Again, doing things in place here is clearer. Also dorun . map is roughly equivalent to doseq.
Handy sugar - you can use dotted names in js/
Fold ->js functions into one to avoid repeated logic all over the place
Similarly, fold in the deep= functions
Nitpick - if you use %2 then use %1 instead of %
Might as well be specific
Short-circuit deep=
Mmmm, more booleans