Skip to content

Debug Conjure, Zensical install & Tui Music

After a curious question in the Conjure channel of Clojurians Slack I decided to experiment with debugging Conjure itself. The issue was the first evaluation command not finding the current namespace, although successive evaluations worked correctly.

I continue to evaluate Zensical as the next tool for Practicalli books and blogs. I found a more effective way to install and upgrade zensical that also removes the need for python specific configuration files.

Conjureλ︎

Conjure is an excellent Neovim plugin for Clojure development (and many other languages).

Set conjure#debug to true in the Neovim plugin config for clojure and restart Neovim.

["conjure#debug"] = true,
Practicalli nvim-Astro5 configuration snippet
lua/plugins/practicalli.lua
  {
    "AstroNvim/astrocore",
    ---@type AstroCoreOpts
    opts = {
      options = {
        -- configure general options: vim.opt.<key>
        opt = {
          spell = true, -- sets vim.opt.spell
          wrap = true, -- sets vim.opt.wrap
          guifont = "Fira Code:h16", -- neovide font family & size
        },
        -- configure global vim variables: vim.g
        g = {
          -- Neovim language provides - disable language integration not required
          loaded_perl_provider = 0,
          loaded_ruby_provider = 0,

          -- Leader key for Visual-Multi Cursors (Multiple Cursors)
          VM_leader = "gm", -- Visual Multi Leader (multiple cursors - user plugin)

          -- Conjure plugin overrides
          -- comment pattern for eval to comment command
          ["conjure#eval#comment_prefix"] = ";; ",
          -- Hightlight evaluated forms
          ["conjure#highlight#enabled"] = true,

          -- show HUD REPL log at startup
          ["conjure#log#hud#enabled"] = false,

          -- auto repl (babashka)
          ["conjure#client#clojure#nrepl#connection#auto_repl#enabled"] = false,
          ["conjure#client#clojure#nrepl#connection#auto_repl#hidden"] = true,
          ["conjure#client#clojure#nrepl#connection#auto_repl#cmd"] = nil,
          ["conjure#client#clojure#nrepl#eval#auto_require"] = false,

          -- Test runner: "clojure", "clojuresCRipt", "kaocha"
          ["conjure#client#clojure#nrepl#test#runner"] = "kaocha",

          -- Debug
          -- Hightlight evaluated forms
          ["conjure#debug"] = true,

          -- Troubleshoot: Minimise very long lines slow down:
          -- ["conjure#log#treesitter"] = false
          -- ["conjure#log##treesitter"] = false,
          -- ["conjure#log#disable_diagnostics"] = true
        },
      },
      mappings = {
        n = {
          -- normal mode key bindings
          -- setting a mapping to false will disable it
          -- ["<esc>"] = false,

          -- whick-key sub-menu for Visual-Multi Cursors (Multiple Cursors)
          ["gm"] = { name = "Multiple Cursors" },

          -- Toggle last open buffer
          ["<Leader><tab>"] = { "<cmd>b#<cr>", desc = "Previous tab" },

          -- navigate buffer tabs
          ["]b"] = { function() require("astrocore.buffer").nav(vim.v.count1) end, desc = "Next buffer" },
          ["[b"] = { function() require("astrocore.buffer").nav(-vim.v.count1) end, desc = "Previous buffer" },

          -- snacks file explorer
          ["<Leader>E"] = { "<cmd>lua Snacks.picker.explorer()<cr>", desc = "Snacks Explorer" },

          -- Save prompting for file name
          ["<Leader>W"] = { ":write ", desc = "Save as file" },

          -- Gist Creation
          ["<Leader>gj"] = { ":GistCreateFromFile ", desc = "Create Gist (file)" },
          ["<Leader>gJ"] = { "<cmd>GistsList<cr>", desc = "List Gist" },

          -- Neogit Status float
          ["<Leader>gf"] = { "<cmd>Neogit kind=floating<cr>", desc = "Git Status (floating)" },

          -- Toggle between src and test (Clojure pack | other-nvim)
          ["<localLeader>ts"] = { "<cmd>Other<cr>", desc = "Switch src & test" },
          ["<localLeader>tS"] = { "<cmd>OtherVSplit<cr>", desc = "Switch src & test (Split)" },

          -- Showkeys plugin (visualise key presses in Neovim window)
          ["<Leader>uk"] = { "<cmd>ShowkeysToggle<cr>", desc = "Toggle Showkeys" },
        },
        t = {
          -- terminal mode key bindings
        },
        v = {
          -- visual mode key bindings
          -- Gist Creation
          ["<Leader>gj"] = { ":GistCreate ", desc = "Create Gist (region)" },
        },
      },
    },
  },

A repl was started on the command line, using the alias :repl/basic from Practicalli Clojure CLI Config. This includes nrepl 1.5.2 and cider-nrepl 0.58.0 as extra dependencies.

Start Clojure REPL with nREPL server

clojure -M:repl/basic
:repl/basic alias
  ;; Basic REPL UI with nREPL server for Clojure Editor support
  :repl/basic
  {:extra-deps {nrepl/nrepl       {:mvn/version "1.5.2"}
                cider/cider-nrepl {:mvn/version "0.58.0"}}
   :main-opts  ["--main" "nrepl.cmdline"
                "--middleware" "[cider.nrepl/cider-middleware]"
                "--interactive"]}

I also tested with nrepl 1.4 and cider-nrepl 0.58.0

:repl/classic alias
  ;; Basic REPL UI with nREPL server for Clojure Editor support
  :repl/basic
  {:extra-deps {nrepl/nrepl       {:mvn/version "1.5.2"}
                cider/cider-nrepl {:mvn/version "0.58.0"}}
   :main-opts  ["--main" "nrepl.cmdline"
                "--middleware" "[cider.nrepl/cider-middleware]"
                "--interactive"]}

Neovim was started, using the Practicalli nvim-astro5 configuration, with clojure#debug enabled.

Space+f+f in Neovim to open the 01-basic.clj file from the Practicalli Clojure Through Code project.

,+l+s in Neovim opened the Conjure log in a split window (using a split as assuming there will be a lot of output in debug mode).

As a Clojure file has been opened, Conjure does an amount of work and starts printing debug information in the log window.

Log output on opening a Clojure file in Neovim
; Sponsored by @terjesb ❤
; --------------------------------------------------------------------------------
; localhost:33735 (connected): /home/practicalli/projects/practicalli/clojure-through-code/.nrepl-port
; debug: send
{:id "8d7cdb01-c13b-4db0-80f2-2a7d9d9eeba3" :op "describe"}
; debug: send
{:id "2f5b391f-a0ca-458b-a351-cc742622f6bb" :op "ls-sessions"}
; debug: /home/practicalli/.local/share/nvim-astro5/lazy/conjure/res/client/clojure/preamble.cljc resource not cached - reading
nil
; debug: send
{:code
 "(create-ns 'conjure.internal)
(intern 'conjure.internal 'initial-ns (symbol (str *ns*)))

(ns conjure.internal
  (:require [clojure.pprint :as pp]
            [clojure.test]
            [clojure.data]
            [clojure.string]))

;; This is a shim that inserts a pprint fn in the place that CIDER would create it if it's not found.
;; We shim instead of creating our own distinct function because babashka requires us
;; to refer to `cider.nrepl.pprint/pprint` if we want to use pretty printing.
;; https://github.com/Olical/conjure/issues/406
(when-not (find-ns 'cider.nrepl.pprint)
  (create-ns 'cider.nrepl.pprint)
  (intern 'cider.nrepl.pprint 'pprint
          (fn pprint [val w opts]
            (apply pp/write val
                   (mapcat identity (assoc opts :stream w))))))

(defn bounded-conj [queue x limit]
  (->> x (conj queue) (take limit)))

(def tap-queue-size 16)
(defonce tap-queue! (atom (list)))

;; Must be a defonce so that we always have the same function
;; reference to remove-tap and add-tap. If we make a new
;; function each time we'll end up adding more and more tap
;; functions.
(defonce enqueue-tap!
  (fn [x] (swap! tap-queue! bounded-conj x tap-queue-size)))

;; No setup for older Clojure versions.
(when (resolve 'add-tap)
  (remove-tap enqueue-tap!)
  (add-tap enqueue-tap!))

(defn dump-tap-queue! []
  (reverse (first (reset-vals! tap-queue! (list)))))

(when true
  (defmethod clojure.test/report :fail [m]
    (clojure.test/with-test-out
      (clojure.test/inc-report-counter :fail)
      (println \"\\nFAIL in\" (clojure.test/testing-vars-str m))
      (when (seq clojure.test/*testing-contexts*) (println (clojure.test/testing-contexts-str)))
      (when-let [message (:message m)] (println message))
      (print \"expected:\" (with-out-str (prn (:expected m))))
      (print \"  actual:\" (with-out-str (prn (:actual m))))
      (when (and (seq? (:actual m))
                 (= #'clojure.core/not (resolve (first (:actual m))))
                 (seq? (second (:actual m)))
                 (= #'clojure.core/= (resolve (first (second (:actual m)))))
                 (= 3 (count (second (:actual m)))))
        (let [[missing extra _] (clojure.data/diff (second (second (:actual m))) (last (second (:actual m))))
              missing-str (with-out-str (pp/pprint missing))
              missing-lines (clojure.string/split-lines missing-str)
              extra-str (with-out-str (pp/pprint extra))
              extra-lines (clojure.string/split-lines extra-str)]
          (when (some? missing) (doseq [m missing-lines] (println \"- \" m)))
          (when (some? extra) (doseq [e extra-lines] (println \"+ \" e))))))))

(in-ns initial-ns)
"
 :id
 "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :op
 "eval"}
; debug: receive
{:id "2f5b391f-a0ca-458b-a351-cc742622f6bb"
 :session "6b5dbb73-26d9-454d-86fb-c3e437d6cc7c"
 :sessions ["44c3284a-41df-4f7e-a66d-bb30f484db91"]
 :status ["done"]}
; debug: with-sessions id for enrichment
"44c3284a-41df-4f7e-a66d-bb30f484db91"
; debug: send
{:code "#?(:clj 'clj :cljs 'cljs :cljr 'cljr :default 'unknown)"
 :id "a7a02df5-c289-47b6-bba7-3c9014cdf523"
 :op "eval"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"}
; debug: receive
{:aux
 {:cider-version
  {:incremental 0 :major 0 :minor 58 :qualifier {} :version-string "0.58.0"}
  :current-ns
  "user"}
 :id
 "8d7cdb01-c13b-4db0-80f2-2a7d9d9eeba3"
 :ops
 {:add-middleware {}
  :analyze-last-stacktrace {}
  :apropos {}
  :cider-version {}
  :cider.clj-reload/reload {}
  :cider.clj-reload/reload-all {}
  :cider.clj-reload/reload-clear {}
  :cider/get-state {}
  :cider/log-add-appender {}
  :cider/log-add-consumer {}
  :cider/log-clear-appender {}
  :cider/log-exceptions {}
  :cider/log-format-event {}
  :cider/log-frameworks {}
  :cider/log-inspect-event {}
  :cider/log-levels {}
  :cider/log-loggers {}
  :cider/log-remove-appender {}
  :cider/log-remove-consumer {}
  :cider/log-search {}
  :cider/log-threads {}
  :cider/log-update-appender {}
  :cider/log-update-consumer {}
  :cider/profile-clear {}
  :cider/profile-summary {}
  :cider/profile-toggle-ns {}
  :cider/profile-toggle-var {}
  :classpath {}
  :clojuredocs-lookup {}
  :clojuredocs-refresh-cache {}
  :clone {}
  :close {}
  :complete {}
  :complete-doc {}
  :complete-flush-caches {}
  :completions {}
  :content-type {}
  :debug-input {}
  :debug-instrumented-defs {}
  :debug-middleware {}
  :describe {}
  :eldoc {}
  :eldoc-datomic-query {}
  :eval {}
  :fn-deps {}
  :fn-refs {}
  :format-code {}
  :format-edn {}
  :forward-system-output {}
  :info {}
  :init-debugger {}
  :inspect-clear {}
  :inspect-def-current-value {}
  :inspect-display-analytics {}
  :inspect-last-exception {}
  :inspect-next-page {}
  :inspect-next-sibling {}
  :inspect-pop {}
  :inspect-prev-page {}
  :inspect-previous-sibling {}
  :inspect-print-current-value {}
  :inspect-push {}
  :inspect-refresh {}
  :inspect-set-max-atom-length {}
  :inspect-set-max-coll-size {}
  :inspect-set-max-nested-depth {}
  :inspect-set-page-size {}
  :inspect-tap-current-value {}
  :inspect-tap-indexed {}
  :inspect-toggle-pretty-print {}
  :inspect-toggle-view-mode {}
  :interrupt {}
  :load-file {}
  :lookup {}
  :ls-middleware {}
  :ls-sessions {}
  :macroexpand {}
  :ns-aliases {}
  :ns-list {}
  :ns-list-vars-by-name {}
  :ns-load-all {}
  :ns-path {}
  :ns-vars {}
  :ns-vars-with-meta {}
  :out-subscribe {}
  :out-unsubscribe {}
  :refresh {}
  :refresh-all {}
  :refresh-clear {}
  :resource {}
  :resources-list {}
  :retest {}
  :slurp {}
  :spec-example {}
  :spec-form {}
  :spec-list {}
  :stacktrace {}
  :stdin {}
  :swap-middleware {}
  :test {}
  :test-all {}
  :test-stacktrace {}
  :test-var-query {}
  :toggle-trace-ns {}
  :toggle-trace-var {}
  :undef {}
  :undef-all {}}
 :session
 "d99593a0-aaf6-4023-bd80-ac2dd5e73757"
 :status
 ["done"]
 :versions
 {:clojure {:incremental 4 :major 1 :minor 12 :version-string "1.12.4"}
  :java {:major 21 :version-string "21.0.9"}
  :nrepl {:incremental 2 :major 1 :minor 5 :version-string "1.5.2"}}}
; --------------------------------------------------------------------------------
; Assumed session: Maltese (Unknown https://github.com/Olical/conjure/wiki/Frequently-asked-questions#what-does-unknown-mean-in-the-log-when-connecting-to-a-clojure-nrepl)
; debug: receive
{:id "a7a02df5-c289-47b6-bba7-3c9014cdf523"
 :ns "user"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :value "clj"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "user"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#namespace[conjure.internal]"}
; debug: receive
{:id "a7a02df5-c289-47b6-bba7-3c9014cdf523"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :status ["done"]}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "user"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#'conjure.internal/initial-ns"}
; debug: receive
{:changed-namespaces
 {:clojure.core
  {:aliases
   {}
   :interns
   {:* {:fn "true"}
    "*'" {:fn "true"}
    :*1 {}
    :*2 {}
    :*3 {}
    :*agent* {}
    :*allow-unresolved-vars* {}
    :*assert* {}
    :*clojure-version* {}
    :*command-line-args* {}
    :*compile-files* {}
    :*compile-path* {}
    :*compiler-options* {}
    :*data-readers* {}
    :*default-data-reader-fn* {}
    :*e {}
    :*err* {}
    :*file* {}
    :*flush-on-newline* {}
    :*fn-loader* {}
    :*in* {}
    :*loaded-libs* {}
    :*loading-verbosely* {}
    :*math-context* {}
    :*ns* {}
    :*out* {}
    :*pending-paths* {}
    :*print-dup* {}
    :*print-length* {}
    :*print-level* {}
    :*print-meta* {}
    :*print-namespace-maps* {}
    :*print-readably* {}
    :*read-eval* {}
    :*reader-resolver* {}
    :*repl* {}
    :*source-path* {}
    :*suppress-read* {}
    :*unchecked-math* {}
    :*use-context-classloader* {}
    :*verbose-defrecords* {}
    :*warn-on-reflection* {}
    :+ {:fn "true"}
    "+'" {:fn "true"}
    :- {:fn "true"}
    "-'" {:fn "true"}
    :-> {:macro "true"}
    :->> {:macro "true"}
    :->ArrayChunk {:fn "true"}
    :->Eduction {:fn "true"}
    :->Vec {:fn "true"}
    :->VecNode {:fn "true"}
    :->VecSeq {:fn "true"}
    :-cache-protocol-fn {:fn "true"}
    :-reset-methods {:fn "true"}
    :.. {:macro "true"}
    :/ {:fn "true"}
    :< {:fn "true"}
    :<= {:fn "true"}
    := {:fn "true"}
    :== {:fn "true"}
    :> {:fn "true"}
    :>0? {:fn "true"}
    :>1? {:fn "true"}
    :>= {:fn "true"}
    :EMPTY-NODE {}
    :Inst {}
    :NaN? {:fn "true"}
    :PrintWriter-on {:fn "true"}
    :StackTraceElement->vec {:fn "true"}
    :Throwable->map {:fn "true"}
    :abs {:fn "true"}
    :accessor {:fn "true"}
    :aclone {:fn "true"}
    :add-annotation {:fn "true"}
    :add-annotations {:fn "true"}
    :add-classpath {:deprecated "\"1.1\"" :fn "true"}
    :add-doc-and-meta {:macro "true"}
    :add-tap {:fn "true"}
    :add-watch {:fn "true"}
    :agent {:fn "true"}
    :agent-error {:fn "true"}
    :agent-errors {:deprecated "\"1.2\"" :fn "true"}
    :aget {:fn "true"}
    :alength {:fn "true"}
    :alias {:fn "true"}
    :all-ns {:fn "true"}
    :alter {:fn "true"}
    :alter-meta! {:fn "true"}
    :alter-var-root {:fn "true"}
    :amap {:macro "true"}
    :ams {}
    :ams-check {:macro "true"}
    :ancestors {:fn "true"}
    :and {:macro "true"}
    :any? {:fn "true"}
    :apply {:fn "true"}
    :areduce {:macro "true"}
    :array {:fn "true"}
    :array-map {:fn "true"}
    :as-> {:macro "true"}
    :aset {:fn "true"}
    :aset-boolean {:fn "true"}
    :aset-byte {:fn "true"}
    :aset-char {:fn "true"}
    :aset-double {:fn "true"}
    :aset-float {:fn "true"}
    :aset-int {:fn "true"}
    :aset-long {:fn "true"}
    :aset-short {:fn "true"}
    :asm-type {:fn "true"}
    :assert {:macro "true"}
    :assert-args {:macro "true"}
    :assert-same-protocol {:fn "true"}
    :assert-valid-fdecl {:fn "true"}
    :assoc {:fn "true"}
    :assoc! {:fn "true"}
    :assoc-in {:fn "true"}
    :associative? {:fn "true"}
    :atom {:fn "true"}
    :await {:fn "true"}
    :await-for {:fn "true"}
    :await1 {:fn "true"}
    :bases {:fn "true"}
    :bean {:fn "true"}
    :bigdec {:fn "true"}
    :bigint {:fn "true"}
    :biginteger {:fn "true"}
    :binding {:macro "true"}
    :binding-conveyor-fn {:fn "true"}
    :bit-and {:fn "true"}
    :bit-and-not {:fn "true"}
    :bit-clear {:fn "true"}
    :bit-flip {:fn "true"}
    :bit-not {:fn "true"}
    :bit-or {:fn "true"}
    :bit-set {:fn "true"}
    :bit-shift-left {:fn "true"}
    :bit-shift-right {:fn "true"}
    :bit-test {:fn "true"}
    :bit-xor {:fn "true"}
    :boolean {:fn "true"}
    :boolean-array {:fn "true"}
    :boolean? {:fn "true"}
    :booleans {:fn "true"}
    :bound-fn {:macro "true"}
    :bound-fn* {:fn "true"}
    :bound? {:fn "true"}
    :bounded-count {:fn "true"}
    :build-positional-factory {:fn "true"}
    :butlast {:fn "true"}
    :byte {:fn "true"}
    :byte-array {:fn "true"}
    :bytes {:fn "true"}
    :bytes? {:fn "true"}
    :case {:macro "true"}
    :case-map {:fn "true"}
    :cast {:fn "true"}
    :cat {:fn "true"}
    :char {:fn "true"}
    :char-array {:fn "true"}
    :char-escape-string {}
    :char-name-string {}
    :char? {:fn "true"}
    :chars {:fn "true"}
    :check-cyclic-dependency {:fn "true"}
    :check-valid-options {:fn "true"}
    :chunk {:fn "true"}
    :chunk-append {:fn "true"}
    :chunk-buffer {:fn "true"}
    :chunk-cons {:fn "true"}
    :chunk-first {:fn "true"}
    :chunk-next {:fn "true"}
    :chunk-rest {:fn "true"}
    :chunked-seq? {:fn "true"}
    :class {:fn "true"}
    :class? {:fn "true"}
    :clear-agent-errors {:deprecated "\"1.2\"" :fn "true"}
    :clojure-version {:fn "true"}
    :coll? {:fn "true"}
    :comment {:macro "true"}
    :commute {:fn "true"}
    :comp {:fn "true"}
    :comparator {:fn "true"}
    :compare {:fn "true"}
    :compare-and-set! {:fn "true"}
    :compile {:fn "true"}
    :complement {:fn "true"}
    :completing {:fn "true"}
    :concat {:fn "true"}
    :cond {:macro "true"}
    :cond-> {:macro "true"}
    :cond->> {:macro "true"}
    :condp {:macro "true"}
    :conj {:fn "true"}
    :conj! {:fn "true"}
    :cons {:fn "true"}
    :constantly {:fn "true"}
    :construct-proxy {:fn "true"}
    :contains? {:fn "true"}
    :count {:fn "true"}
    :counted? {:fn "true"}
    :create-ns {:fn "true"}
    :create-struct {:fn "true"}
    :ctor-sigs {:fn "true"}
    :cycle {:fn "true"}
    :data-reader-urls {:fn "true"}
    :data-reader-var {:fn "true"}
    :dec {:fn "true"}
    "dec'" {:fn "true"}
    :decimal? {:fn "true"}
    :declare {:macro "true"}
    :dedupe {:fn "true"}
    :def-aset {:macro "true"}
    :default-data-readers {}
    :definline {:macro "true"}
    :definterface {:macro "true"}
    :defmacro {:macro "true"}
    :defmethod {:macro "true"}
    :defmulti {:macro "true"}
    :defn {:macro "true"}
    :defn- {:macro "true"}
    :defonce {:macro "true"}
    :defprotocol {:macro "true"}
    :defrecord {:macro "true"}
    :defstruct {:macro "true"}
    :deftype {:macro "true"}
    :delay {:macro "true"}
    :delay? {:fn "true"}
    :deliver {:fn "true"}
    :denominator {:fn "true"}
    :deref {:fn "true"}
    :deref-as-map {:fn "true"}
    :deref-future {:fn "true"}
    :derive {:fn "true"}
    :descendants {:fn "true"}
    :descriptor {:fn "true"}
    :destructure {:fn "true"}
    :disj {:fn "true"}
    :disj! {:fn "true"}
    :dissoc {:fn "true"}
    :dissoc! {:fn "true"}
    :distinct {:fn "true"}
    :distinct? {:fn "true"}
    :doall {:fn "true"}
    :dorun {:fn "true"}
    :doseq {:macro "true"}
    :dosync {:macro "true"}
    :dotimes {:macro "true"}
    :doto {:macro "true"}
    :double {:fn "true"}
    :double-array {:fn "true"}
    :double? {:fn "true"}
    :doubles {:fn "true"}
    :drop {:fn "true"}
    :drop-last {:fn "true"}
    :drop-while {:fn "true"}
    :eduction {:fn "true"}
    :elide-top-frames {:fn "true"}
    :emit-defrecord {:fn "true"}
    :emit-deftype* {:fn "true"}
    :emit-extend-protocol {:fn "true"}
    :emit-extend-type {:fn "true"}
    :emit-hinted-impl {:fn "true"}
    :emit-impl {:fn "true"}
    :emit-method-builder {:fn "true"}
    :emit-protocol {:fn "true"}
    :empty {:fn "true"}
    :empty? {:fn "true"}
    :ensure {:fn "true"}
    :ensure-reduced {:fn "true"}
    :enumeration-seq {:fn "true"}
    :error-handler {:fn "true"}
    :error-mode {:fn "true"}
    :escape-class-name {:fn "true"}
    :eval {:fn "true"}
    :even? {:fn "true"}
    :every-pred {:fn "true"}
    :every? {:fn "true"}
    :ex-cause {:fn "true"}
    :ex-data {:fn "true"}
    :ex-info {:fn "true"}
    :ex-message {:fn "true"}
    :expand-method-impl-cache {:fn "true"}
    :extend {:fn "true"}
    :extend-protocol {:macro "true"}
    :extend-type {:macro "true"}
    :extenders {:fn "true"}
    :extends? {:fn "true"}
    :false? {:fn "true"}
    :ffirst {:fn "true"}
    :file-seq {:fn "true"}
    :filter {:fn "true"}
    :filter-key {:fn "true"}
    :filter-methods {:fn "true"}
    :filterv {:fn "true"}
    :find {:fn "true"}
    :find-field {:fn "true"}
    :find-keyword {:fn "true"}
    :find-ns {:fn "true"}
    :find-protocol-impl {:fn "true"}
    :find-protocol-method {:fn "true"}
    :find-var {:fn "true"}
    :first {:fn "true"}
    :fits-table? {:fn "true"}
    :flatten {:fn "true"}
    :float {:fn "true"}
    :float-array {:fn "true"}
    :float? {:fn "true"}
    :floats {:fn "true"}
    :flush {:fn "true"}
    :fn {:macro "true"}
    :fn? {:fn "true"}
    :fnext {:fn "true"}
    :fnil {:fn "true"}
    :for {:macro "true"}
    :force {:fn "true"}
    :format {:fn "true"}
    :frequencies {:fn "true"}
    :future {:macro "true"}
    :future-call {:fn "true"}
    :future-cancel {:fn "true"}
    :future-cancelled? {:fn "true"}
    :future-done? {:fn "true"}
    :future? {:fn "true"}
    :gen-class {:macro "true"}
    :gen-interface {:macro "true"}
    :generate-class {:fn "true"}
    :generate-interface {:fn "true"}
    :generate-proxy {:fn "true"}
    :gensym {:fn "true"}
    :get {:fn "true"}
    :get-in {:fn "true"}
    :get-method {:fn "true"}
    :get-proxy-class {:fn "true"}
    :get-super-and-interfaces {:fn "true"}
    :get-thread-bindings {:fn "true"}
    :get-validator {:fn "true"}
    :global-hierarchy {}
    :group-by {:fn "true"}
    :group-by-sig {:fn "true"}
    :halt-when {:fn "true"}
    :hash {:fn "true"}
    :hash-combine {:fn "true"}
    :hash-map {:fn "true"}
    :hash-ordered-coll {:fn "true"}
    :hash-set {:fn "true"}
    :hash-unordered-coll {:fn "true"}
    :ident? {:fn "true"}
    :identical? {:fn "true"}
    :identity {:fn "true"}
    :if-let {:macro "true"}
    :if-not {:macro "true"}
    :if-some {:macro "true"}
    :ifn? {:fn "true"}
    :imap-cons {:fn "true"}
    :implements? {:fn "true"}
    :import {:macro "true"}
    :in-ns {}
    :inc {:fn "true"}
    "inc'" {:fn "true"}
    :indexed? {:fn "true"}
    :infinite? {:fn "true"}
    :init-proxy {:fn "true"}
    :inst-ms {:fn "true"}
    :inst-ms* {:fn "true"}
    :inst? {:fn "true"}
    :instance? {:fn "true"}
    :int {:fn "true"}
    :int-array {:fn "true"}
    :int? {:fn "true"}
    :integer? {:fn "true"}
    :interleave {:fn "true"}
    :intern {:fn "true"}
    :interpose {:fn "true"}
    :into {:fn "true"}
    :into-array {:fn "true"}
    :into1 {:fn "true"}
    :ints {:fn "true"}
    :io! {:macro "true"}
    :is-annotation? {:fn "true"}
    :is-runtime-annotation? {:fn "true"}
    :isa? {:fn "true"}
    :iterate {:fn "true"}
    :iteration {:fn "true"}
    :iterator-seq {:fn "true"}
    :juxt {:fn "true"}
    :keep {:fn "true"}
    :keep-indexed {:fn "true"}
    :key {:fn "true"}
    :keys {:fn "true"}
    :keyword {:fn "true"}
    :keyword? {:fn "true"}
    :last {:fn "true"}
    :lazy-cat {:macro "true"}
    :lazy-seq {:macro "true"}
    :let {:macro "true"}
    :letfn {:macro "true"}
    :libspec? {:fn "true"}
    :lift-ns {:fn "true"}
    :line-seq {:fn "true"}
    :list {:fn "true"}
    :list* {:fn "true"}
    :list? {:fn "true"}
    :load {:fn "true"}
    :load-all {:fn "true"}
    :load-data-reader-file {:fn "true"}
    :load-data-readers {:fn "true"}
    :load-file {}
    :load-lib {:fn "true"}
    :load-libs {:fn "true"}
    :load-one {:fn "true"}
    :load-reader {:fn "true"}
    :load-string {:fn "true"}
    :loaded-libs {:fn "true"}
    :locking {:macro "true"}
    :long {:fn "true"}
    :long-array {:fn "true"}
    :longs {:fn "true"}
    :loop {:macro "true"}
    :macroexpand {:fn "true"}
    :macroexpand-1 {:fn "true"}
    :make-array {:fn "true"}
    :make-hierarchy {:fn "true"}
    :map {:fn "true"}
    :map-entry? {:fn "true"}
    :map-indexed {:fn "true"}
    :map? {:fn "true"}
    :mapcat {:fn "true"}
    :mapv {:fn "true"}
    :max {:fn "true"}
    :max-key {:fn "true"}
    :max-mask-bits {}
    :max-switch-table-size {}
    :maybe-destructured {:fn "true"}
    :maybe-min-hash {:fn "true"}
    :memfn {:macro "true"}
    :memoize {:fn "true"}
    :merge {:fn "true"}
    :merge-hash-collisions {:fn "true"}
    :merge-with {:fn "true"}
    :meta {:fn "true"}
    :method-sig {:fn "true"}
    :methods {:fn "true"}
    :min {:fn "true"}
    :min-key {:fn "true"}
    :mix-collection-hash {:fn "true"}
    :mk-am {:macro "true"}
    :mk-bound-fn {:fn "true"}
    :mod {:fn "true"}
    :most-specific {:fn "true"}
    :munge {:fn "true"}
    :name {:fn "true"}
    :namespace {:fn "true"}
    :namespace-munge {:fn "true"}
    :nary-inline {:fn "true"}
    :nat-int? {:fn "true"}
    :neg-int? {:fn "true"}
    :neg? {:fn "true"}
    :newline {:fn "true"}
    :next {:fn "true"}
    :nfirst {:fn "true"}
    :nil? {:fn "true"}
    :nnext {:fn "true"}
    :non-private-methods {:fn "true"}
    :normalize-slurp-opts {:fn "true"}
    :not {:fn "true"}
    :not-any? {:fn "true"}
    :not-empty {:fn "true"}
    :not-every? {:fn "true"}
    :not= {:fn "true"}
    :ns {:macro "true"}
    :ns-aliases {:fn "true"}
    :ns-imports {:fn "true"}
    :ns-interns {:fn "true"}
    :ns-map {:fn "true"}
    :ns-name {:fn "true"}
    :ns-publics {:fn "true"}
    :ns-refers {:fn "true"}
    :ns-resolve {:fn "true"}
    :ns-unalias {:fn "true"}
    :ns-unmap {:fn "true"}
    :nth {:fn "true"}
    :nthnext {:fn "true"}
    :nthrest {:fn "true"}
    :num {:fn "true"}
    :number? {:fn "true"}
    :numerator {:fn "true"}
    :object-array {:fn "true"}
    :odd? {:fn "true"}
    :or {:macro "true"}
    :overload-name {:fn "true"}
    :parents {:fn "true"}
    :parse-boolean {:fn "true"}
    :parse-double {:fn "true"}
    :parse-impls {:fn "true"}
    :parse-long {:fn "true"}
    :parse-opts {:fn "true"}
    :parse-opts+specs {:fn "true"}
    :parse-uuid {:fn "true"}
    :parsing-err {:fn "true"}
    :partial {:fn "true"}
    :partition {:fn "true"}
    :partition-all {:fn "true"}
    :partition-by {:fn "true"}
    :partitionv {:fn "true"}
    :partitionv-all {:fn "true"}
    :pcalls {:fn "true"}
    :peek {:fn "true"}
    :persistent! {:fn "true"}
    :pmap {:fn "true"}
    :pop {:fn "true"}
    :pop! {:fn "true"}
    :pop-thread-bindings {:fn "true"}
    :pos-int? {:fn "true"}
    :pos? {:fn "true"}
    :pr {:fn "true"}
    :pr-on {:fn "true"}
    :pr-str {:fn "true"}
    :pref {:fn "true"}
    :prefer-method {:fn "true"}
    :prefers {:fn "true"}
    :prep-hashes {:fn "true"}
    :prep-ints {:fn "true"}
    :prependss {:fn "true"}
    :preserving-reduced {:fn "true"}
    :prim->class {}
    :primitives-classnames {}
    :print {:fn "true"}
    :print-ctor {:fn "true"}
    :print-dup {:fn "true"}
    :print-initialized {}
    :print-map {:fn "true"}
    :print-meta {:fn "true"}
    :print-method {:fn "true"}
    :print-object {:fn "true"}
    :print-prefix-map {:fn "true"}
    :print-sequential {:fn "true"}
    :print-simple {:fn "true"}
    :print-str {:fn "true"}
    :print-tagged-object {:fn "true"}
    :print-throwable {:fn "true"}
    :printf {:fn "true"}
    :println {:fn "true"}
    :println-str {:fn "true"}
    :prn {:fn "true"}
    :prn-str {:fn "true"}
    :process-annotation {:fn "true"}
    :promise {:fn "true"}
    :protected-final-methods {:fn "true"}
    :protocol? {:fn "true"}
    :proxy {:macro "true"}
    :proxy-call-with-super {:fn "true"}
    :proxy-mappings {:fn "true"}
    :proxy-name {:fn "true"}
    :proxy-super {:macro "true"}
    :push-thread-bindings {:fn "true"}
    :pvalues {:macro "true"}
    :qualified-ident? {:fn "true"}
    :qualified-keyword? {:fn "true"}
    :qualified-symbol? {:fn "true"}
    :quot {:fn "true"}
    :rand {:fn "true"}
    :rand-int {:fn "true"}
    :rand-nth {:fn "true"}
    :random-sample {:fn "true"}
    :random-uuid {:fn "true"}
    :range {:fn "true"}
    :ratio? {:fn "true"}
    :rational? {:fn "true"}
    :rationalize {:fn "true"}
    :re-find {:fn "true"}
    :re-groups {:fn "true"}
    :re-matcher {:fn "true"}
    :re-matches {:fn "true"}
    :re-pattern {:fn "true"}
    :re-seq {:fn "true"}
    :read {:fn "true"}
    :read+string {:fn "true"}
    :read-line {:fn "true"}
    :read-string {:fn "true"}
    :reader-conditional {:fn "true"}
    :reader-conditional? {:fn "true"}
    :realized? {:fn "true"}
    :record? {:fn "true"}
    :reduce {:fn "true"}
    :reduce-kv {:fn "true"}
    :reduce1 {:fn "true"}
    :reduced {:fn "true"}
    :reduced? {:fn "true"}
    :reductions {:fn "true"}
    :ref {:fn "true"}
    :ref-history-count {:fn "true"}
    :ref-max-history {:fn "true"}
    :ref-min-history {:fn "true"}
    :ref-set {:fn "true"}
    :refer {:fn "true"}
    :refer-clojure {:macro "true"}
    :reify {:macro "true"}
    :release-pending-sends {:fn "true"}
    :rem {:fn "true"}
    :remove {:fn "true"}
    :remove-all-methods {:fn "true"}
    :remove-method {:fn "true"}
    :remove-ns {:fn "true"}
    :remove-tap {:fn "true"}
    :remove-watch {:fn "true"}
    :repeat {:fn "true"}
    :repeatedly {:fn "true"}
    :replace {:fn "true"}
    :replicate {:deprecated "\"1.3\"" :fn "true"}
    :require {:fn "true"}
    :requiring-resolve {:fn "true"}
    :reset! {:fn "true"}
    :reset-meta! {:fn "true"}
    :reset-vals! {:fn "true"}
    :resolve {:fn "true"}
    :rest {:fn "true"}
    :restart-agent {:fn "true"}
    :resultset-seq {:fn "true"}
    :reverse {:fn "true"}
    :reversible? {:fn "true"}
    :root-directory {:fn "true"}
    :root-resource {:fn "true"}
    :rseq {:fn "true"}
    :rsubseq {:fn "true"}
    :run! {:fn "true"}
    :satisfies? {:fn "true"}
    :second {:fn "true"}
    :select-keys {:fn "true"}
    :send {:fn "true"}
    :send-off {:fn "true"}
    :send-via {:fn "true"}
    :seq {:fn "true"}
    :seq-to-map-for-destructuring {:fn "true"}
    :seq? {:fn "true"}
    :seqable? {:fn "true"}
    :seque {:fn "true"}
    :sequence {:fn "true"}
    :sequential? {:fn "true"}
    :serialized-require {:fn "true"}
    :set {:fn "true"}
    :set-agent-send-executor! {:fn "true"}
    :set-agent-send-off-executor! {:fn "true"}
    :set-error-handler! {:fn "true"}
    :set-error-mode! {:fn "true"}
    :set-validator! {:fn "true"}
    :set? {:fn "true"}
    :setup-reference {:fn "true"}
    :shift-mask {:fn "true"}
    :short {:fn "true"}
    :short-array {:fn "true"}
    :shorts {:fn "true"}
    :shuffle {:fn "true"}
    :shutdown-agents {:fn "true"}
    :sigs {:fn "true"}
    :simple-ident? {:fn "true"}
    :simple-keyword? {:fn "true"}
    :simple-symbol? {:fn "true"}
    :slurp {:fn "true"}
    :some {:fn "true"}
    :some-> {:macro "true"}
    :some->> {:macro "true"}
    :some-fn {:fn "true"}
    :some? {:fn "true"}
    :sort {:fn "true"}
    :sort-by {:fn "true"}
    :sorted-map {:fn "true"}
    :sorted-map-by {:fn "true"}
    :sorted-set {:fn "true"}
    :sorted-set-by {:fn "true"}
    :sorted? {:fn "true"}
    :special-symbol? {:fn "true"}
    :spit {:fn "true"}
    :split-at {:fn "true"}
    :split-with {:fn "true"}
    :splitv-at {:fn "true"}
    :spread {:fn "true"}
    :str {:fn "true"}
    :stream-into! {:fn "true"}
    :stream-reduce! {:fn "true"}
    :stream-seq! {:fn "true"}
    :stream-transduce! {:fn "true"}
    :string? {:fn "true"}
    :strip-ns {:fn "true"}
    :struct {:fn "true"}
    :struct-map {:fn "true"}
    :subs {:fn "true"}
    :subseq {:fn "true"}
    :subvec {:fn "true"}
    :super-chain {:fn "true"}
    :supers {:fn "true"}
    :swap! {:fn "true"}
    :swap-vals! {:fn "true"}
    :symbol {:fn "true"}
    :symbol? {:fn "true"}
    :sync {:macro "true"}
    :system-newline {}
    :tagged-literal {:fn "true"}
    :tagged-literal? {:fn "true"}
    :take {:fn "true"}
    :take-last {:fn "true"}
    :take-nth {:fn "true"}
    :take-while {:fn "true"}
    :tap-loop {}
    :tap> {:fn "true"}
    :tapq {}
    :tapset {}
    :test {:fn "true"}
    :the-array-class {:fn "true"}
    :the-class {:fn "true"}
    :the-ns {:fn "true"}
    :thread-bound? {:fn "true"}
    :throw-if {:fn "true"}
    :time {:macro "true"}
    :to-array {:fn "true"}
    :to-array-2d {:fn "true"}
    :trampoline {:fn "true"}
    :transduce {:fn "true"}
    :transient {:fn "true"}
    :tree-seq {:fn "true"}
    :true? {:fn "true"}
    :type {:fn "true"}
    :unchecked-add {:fn "true"}
    :unchecked-add-int {:fn "true"}
    :unchecked-byte {:fn "true"}
    :unchecked-char {:fn "true"}
    :unchecked-dec {:fn "true"}
    :unchecked-dec-int {:fn "true"}
    :unchecked-divide-int {:fn "true"}
    :unchecked-double {:fn "true"}
    :unchecked-float {:fn "true"}
    :unchecked-inc {:fn "true"}
    :unchecked-inc-int {:fn "true"}
    :unchecked-int {:fn "true"}
    :unchecked-long {:fn "true"}
    :unchecked-multiply {:fn "true"}
    :unchecked-multiply-int {:fn "true"}
    :unchecked-negate {:fn "true"}
    :unchecked-negate-int {:fn "true"}
    :unchecked-remainder-int {:fn "true"}
    :unchecked-short {:fn "true"}
    :unchecked-subtract {:fn "true"}
    :unchecked-subtract-int {:fn "true"}
    :underive {:fn "true"}
    :unquote {}
    :unquote-splicing {}
    :unreduced {:fn "true"}
    :unsigned-bit-shift-right {:fn "true"}
    :update {:fn "true"}
    :update-in {:fn "true"}
    :update-keys {:fn "true"}
    :update-proxy {:fn "true"}
    :update-vals {:fn "true"}
    :uri? {:fn "true"}
    :use {:fn "true"}
    :uuid? {:fn "true"}
    :val {:fn "true"}
    :valid-java-method-name {:fn "true"}
    :validate-fields {:fn "true"}
    :validate-generate-class-options {:fn "true"}
    :vals {:fn "true"}
    :var-get {:fn "true"}
    :var-set {:fn "true"}
    :var? {:fn "true"}
    :vary-meta {:fn "true"}
    :vec {:fn "true"}
    :vector {:fn "true"}
    :vector-of {:fn "true"}
    :vector? {:fn "true"}
    :volatile! {:fn "true"}
    :volatile? {:fn "true"}
    :vreset! {:fn "true"}
    :vswap! {:macro "true"}
    :when {:macro "true"}
    :when-class {:macro "true"}
    :when-first {:macro "true"}
    :when-let {:macro "true"}
    :when-not {:macro "true"}
    :when-some {:macro "true"}
    :while {:macro "true"}
    :with-bindings {:macro "true"}
    :with-bindings* {:fn "true"}
    :with-in-str {:macro "true"}
    :with-loading-context {:macro "true"}
    :with-local-vars {:macro "true"}
    :with-meta {:fn "true"}
    :with-open {:macro "true"}
    :with-out-str {:macro "true"}
    :with-precision {:macro "true"}
    :with-redefs {:macro "true"}
    :with-redefs-fn {:fn "true"}
    :xml-seq {:fn "true"}
    :zero? {:fn "true"}
    :zipmap {:fn "true"}}}
  :conjure.internal
  {:aliases {} :interns {:initial-ns {}}}
  :user
  {:aliases {} :interns {}}}
 :id
 "a7a02df5-c289-47b6-bba7-3c9014cdf523"
 :repl-type
 "clj"
 :session
 "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :status
 ["state"]}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "nil"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "nil"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#'conjure.internal/bounded-conj"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#'conjure.internal/tap-queue-size"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#'conjure.internal/tap-queue!"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#'conjure.internal/enqueue-tap!"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "nil"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#'conjure.internal/dump-tap-queue!"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "conjure.internal"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#multifn[report 0x311fbd11]"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :ns "user"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :value "#namespace[user]"}
; debug: receive
{:id "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :session "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :status ["done"]}
; debug: receive
{:changed-namespaces
 {:clojure.core
  {:aliases
   {}
   :interns
   {:* {:fn "true"}
    "*'" {:fn "true"}
    :*1 {}
    :*2 {}
    :*3 {}
    :*agent* {}
    :*allow-unresolved-vars* {}
    :*assert* {}
    :*clojure-version* {}
    :*command-line-args* {}
    :*compile-files* {}
    :*compile-path* {}
    :*compiler-options* {}
    :*data-readers* {}
    :*default-data-reader-fn* {}
    :*e {}
    :*err* {}
    :*file* {}
    :*flush-on-newline* {}
    :*fn-loader* {}
    :*in* {}
    :*loaded-libs* {}
    :*loading-verbosely* {}
    :*math-context* {}
    :*ns* {}
    :*out* {}
    :*pending-paths* {}
    :*print-dup* {}
    :*print-length* {}
    :*print-level* {}
    :*print-meta* {}
    :*print-namespace-maps* {}
    :*print-readably* {}
    :*read-eval* {}
    :*reader-resolver* {}
    :*repl* {}
    :*source-path* {}
    :*suppress-read* {}
    :*unchecked-math* {}
    :*use-context-classloader* {}
    :*verbose-defrecords* {}
    :*warn-on-reflection* {}
    :+ {:fn "true"}
    "+'" {:fn "true"}
    :- {:fn "true"}
    "-'" {:fn "true"}
    :-> {:macro "true"}
    :->> {:macro "true"}
    :->ArrayChunk {:fn "true"}
    :->Eduction {:fn "true"}
    :->Vec {:fn "true"}
    :->VecNode {:fn "true"}
    :->VecSeq {:fn "true"}
    :-cache-protocol-fn {:fn "true"}
    :-reset-methods {:fn "true"}
    :.. {:macro "true"}
    :/ {:fn "true"}
    :< {:fn "true"}
    :<= {:fn "true"}
    := {:fn "true"}
    :== {:fn "true"}
    :> {:fn "true"}
    :>0? {:fn "true"}
    :>1? {:fn "true"}
    :>= {:fn "true"}
    :EMPTY-NODE {}
    :Inst {}
    :NaN? {:fn "true"}
    :PrintWriter-on {:fn "true"}
    :StackTraceElement->vec {:fn "true"}
    :Throwable->map {:fn "true"}
    :abs {:fn "true"}
    :accessor {:fn "true"}
    :aclone {:fn "true"}
    :add-annotation {:fn "true"}
    :add-annotations {:fn "true"}
    :add-classpath {:deprecated "\"1.1\"" :fn "true"}
    :add-doc-and-meta {:macro "true"}
    :add-tap {:fn "true"}
    :add-watch {:fn "true"}
    :agent {:fn "true"}
    :agent-error {:fn "true"}
    :agent-errors {:deprecated "\"1.2\"" :fn "true"}
    :aget {:fn "true"}
    :alength {:fn "true"}
    :alias {:fn "true"}
    :all-ns {:fn "true"}
    :alter {:fn "true"}
    :alter-meta! {:fn "true"}
    :alter-var-root {:fn "true"}
    :amap {:macro "true"}
    :ams {}
    :ams-check {:macro "true"}
    :ancestors {:fn "true"}
    :and {:macro "true"}
    :any? {:fn "true"}
    :apply {:fn "true"}
    :areduce {:macro "true"}
    :array {:fn "true"}
    :array-map {:fn "true"}
    :as-> {:macro "true"}
    :aset {:fn "true"}
    :aset-boolean {:fn "true"}
    :aset-byte {:fn "true"}
    :aset-char {:fn "true"}
    :aset-double {:fn "true"}
    :aset-float {:fn "true"}
    :aset-int {:fn "true"}
    :aset-long {:fn "true"}
    :aset-short {:fn "true"}
    :asm-type {:fn "true"}
    :assert {:macro "true"}
    :assert-args {:macro "true"}
    :assert-same-protocol {:fn "true"}
    :assert-valid-fdecl {:fn "true"}
    :assoc {:fn "true"}
    :assoc! {:fn "true"}
    :assoc-in {:fn "true"}
    :associative? {:fn "true"}
    :atom {:fn "true"}
    :await {:fn "true"}
    :await-for {:fn "true"}
    :await1 {:fn "true"}
    :bases {:fn "true"}
    :bean {:fn "true"}
    :bigdec {:fn "true"}
    :bigint {:fn "true"}
    :biginteger {:fn "true"}
    :binding {:macro "true"}
    :binding-conveyor-fn {:fn "true"}
    :bit-and {:fn "true"}
    :bit-and-not {:fn "true"}
    :bit-clear {:fn "true"}
    :bit-flip {:fn "true"}
    :bit-not {:fn "true"}
    :bit-or {:fn "true"}
    :bit-set {:fn "true"}
    :bit-shift-left {:fn "true"}
    :bit-shift-right {:fn "true"}
    :bit-test {:fn "true"}
    :bit-xor {:fn "true"}
    :boolean {:fn "true"}
    :boolean-array {:fn "true"}
    :boolean? {:fn "true"}
    :booleans {:fn "true"}
    :bound-fn {:macro "true"}
    :bound-fn* {:fn "true"}
    :bound? {:fn "true"}
    :bounded-count {:fn "true"}
    :build-positional-factory {:fn "true"}
    :butlast {:fn "true"}
    :byte {:fn "true"}
    :byte-array {:fn "true"}
    :bytes {:fn "true"}
    :bytes? {:fn "true"}
    :case {:macro "true"}
    :case-map {:fn "true"}
    :cast {:fn "true"}
    :cat {:fn "true"}
    :char {:fn "true"}
    :char-array {:fn "true"}
    :char-escape-string {}
    :char-name-string {}
    :char? {:fn "true"}
    :chars {:fn "true"}
    :check-cyclic-dependency {:fn "true"}
    :check-valid-options {:fn "true"}
    :chunk {:fn "true"}
    :chunk-append {:fn "true"}
    :chunk-buffer {:fn "true"}
    :chunk-cons {:fn "true"}
    :chunk-first {:fn "true"}
    :chunk-next {:fn "true"}
    :chunk-rest {:fn "true"}
    :chunked-seq? {:fn "true"}
    :class {:fn "true"}
    :class? {:fn "true"}
    :clear-agent-errors {:deprecated "\"1.2\"" :fn "true"}
    :clojure-version {:fn "true"}
    :coll? {:fn "true"}
    :comment {:macro "true"}
    :commute {:fn "true"}
    :comp {:fn "true"}
    :comparator {:fn "true"}
    :compare {:fn "true"}
    :compare-and-set! {:fn "true"}
    :compile {:fn "true"}
    :complement {:fn "true"}
    :completing {:fn "true"}
    :concat {:fn "true"}
    :cond {:macro "true"}
    :cond-> {:macro "true"}
    :cond->> {:macro "true"}
    :condp {:macro "true"}
    :conj {:fn "true"}
    :conj! {:fn "true"}
    :cons {:fn "true"}
    :constantly {:fn "true"}
    :construct-proxy {:fn "true"}
    :contains? {:fn "true"}
    :count {:fn "true"}
    :counted? {:fn "true"}
    :create-ns {:fn "true"}
    :create-struct {:fn "true"}
    :ctor-sigs {:fn "true"}
    :cycle {:fn "true"}
    :data-reader-urls {:fn "true"}
    :data-reader-var {:fn "true"}
    :dec {:fn "true"}
    "dec'" {:fn "true"}
    :decimal? {:fn "true"}
    :declare {:macro "true"}
    :dedupe {:fn "true"}
    :def-aset {:macro "true"}
    :default-data-readers {}
    :definline {:macro "true"}
    :definterface {:macro "true"}
    :defmacro {:macro "true"}
    :defmethod {:macro "true"}
    :defmulti {:macro "true"}
    :defn {:macro "true"}
    :defn- {:macro "true"}
    :defonce {:macro "true"}
    :defprotocol {:macro "true"}
    :defrecord {:macro "true"}
    :defstruct {:macro "true"}
    :deftype {:macro "true"}
    :delay {:macro "true"}
    :delay? {:fn "true"}
    :deliver {:fn "true"}
    :denominator {:fn "true"}
    :deref {:fn "true"}
    :deref-as-map {:fn "true"}
    :deref-future {:fn "true"}
    :derive {:fn "true"}
    :descendants {:fn "true"}
    :descriptor {:fn "true"}
    :destructure {:fn "true"}
    :disj {:fn "true"}
    :disj! {:fn "true"}
    :dissoc {:fn "true"}
    :dissoc! {:fn "true"}
    :distinct {:fn "true"}
    :distinct? {:fn "true"}
    :doall {:fn "true"}
    :dorun {:fn "true"}
    :doseq {:macro "true"}
    :dosync {:macro "true"}
    :dotimes {:macro "true"}
    :doto {:macro "true"}
    :double {:fn "true"}
    :double-array {:fn "true"}
    :double? {:fn "true"}
    :doubles {:fn "true"}
    :drop {:fn "true"}
    :drop-last {:fn "true"}
    :drop-while {:fn "true"}
    :eduction {:fn "true"}
    :elide-top-frames {:fn "true"}
    :emit-defrecord {:fn "true"}
    :emit-deftype* {:fn "true"}
    :emit-extend-protocol {:fn "true"}
    :emit-extend-type {:fn "true"}
    :emit-hinted-impl {:fn "true"}
    :emit-impl {:fn "true"}
    :emit-method-builder {:fn "true"}
    :emit-protocol {:fn "true"}
    :empty {:fn "true"}
    :empty? {:fn "true"}
    :ensure {:fn "true"}
    :ensure-reduced {:fn "true"}
    :enumeration-seq {:fn "true"}
    :error-handler {:fn "true"}
    :error-mode {:fn "true"}
    :escape-class-name {:fn "true"}
    :eval {:fn "true"}
    :even? {:fn "true"}
    :every-pred {:fn "true"}
    :every? {:fn "true"}
    :ex-cause {:fn "true"}
    :ex-data {:fn "true"}
    :ex-info {:fn "true"}
    :ex-message {:fn "true"}
    :expand-method-impl-cache {:fn "true"}
    :extend {:fn "true"}
    :extend-protocol {:macro "true"}
    :extend-type {:macro "true"}
    :extenders {:fn "true"}
    :extends? {:fn "true"}
    :false? {:fn "true"}
    :ffirst {:fn "true"}
    :file-seq {:fn "true"}
    :filter {:fn "true"}
    :filter-key {:fn "true"}
    :filter-methods {:fn "true"}
    :filterv {:fn "true"}
    :find {:fn "true"}
    :find-field {:fn "true"}
    :find-keyword {:fn "true"}
    :find-ns {:fn "true"}
    :find-protocol-impl {:fn "true"}
    :find-protocol-method {:fn "true"}
    :find-var {:fn "true"}
    :first {:fn "true"}
    :fits-table? {:fn "true"}
    :flatten {:fn "true"}
    :float {:fn "true"}
    :float-array {:fn "true"}
    :float? {:fn "true"}
    :floats {:fn "true"}
    :flush {:fn "true"}
    :fn {:macro "true"}
    :fn? {:fn "true"}
    :fnext {:fn "true"}
    :fnil {:fn "true"}
    :for {:macro "true"}
    :force {:fn "true"}
    :format {:fn "true"}
    :frequencies {:fn "true"}
    :future {:macro "true"}
    :future-call {:fn "true"}
    :future-cancel {:fn "true"}
    :future-cancelled? {:fn "true"}
    :future-done? {:fn "true"}
    :future? {:fn "true"}
    :gen-class {:macro "true"}
    :gen-interface {:macro "true"}
    :generate-class {:fn "true"}
    :generate-interface {:fn "true"}
    :generate-proxy {:fn "true"}
    :gensym {:fn "true"}
    :get {:fn "true"}
    :get-in {:fn "true"}
    :get-method {:fn "true"}
    :get-proxy-class {:fn "true"}
    :get-super-and-interfaces {:fn "true"}
    :get-thread-bindings {:fn "true"}
    :get-validator {:fn "true"}
    :global-hierarchy {}
    :group-by {:fn "true"}
    :group-by-sig {:fn "true"}
    :halt-when {:fn "true"}
    :hash {:fn "true"}
    :hash-combine {:fn "true"}
    :hash-map {:fn "true"}
    :hash-ordered-coll {:fn "true"}
    :hash-set {:fn "true"}
    :hash-unordered-coll {:fn "true"}
    :ident? {:fn "true"}
    :identical? {:fn "true"}
    :identity {:fn "true"}
    :if-let {:macro "true"}
    :if-not {:macro "true"}
    :if-some {:macro "true"}
    :ifn? {:fn "true"}
    :imap-cons {:fn "true"}
    :implements? {:fn "true"}
    :import {:macro "true"}
    :in-ns {}
    :inc {:fn "true"}
    "inc'" {:fn "true"}
    :indexed? {:fn "true"}
    :infinite? {:fn "true"}
    :init-proxy {:fn "true"}
    :inst-ms {:fn "true"}
    :inst-ms* {:fn "true"}
    :inst? {:fn "true"}
    :instance? {:fn "true"}
    :int {:fn "true"}
    :int-array {:fn "true"}
    :int? {:fn "true"}
    :integer? {:fn "true"}
    :interleave {:fn "true"}
    :intern {:fn "true"}
    :interpose {:fn "true"}
    :into {:fn "true"}
    :into-array {:fn "true"}
    :into1 {:fn "true"}
    :ints {:fn "true"}
    :io! {:macro "true"}
    :is-annotation? {:fn "true"}
    :is-runtime-annotation? {:fn "true"}
    :isa? {:fn "true"}
    :iterate {:fn "true"}
    :iteration {:fn "true"}
    :iterator-seq {:fn "true"}
    :juxt {:fn "true"}
    :keep {:fn "true"}
    :keep-indexed {:fn "true"}
    :key {:fn "true"}
    :keys {:fn "true"}
    :keyword {:fn "true"}
    :keyword? {:fn "true"}
    :last {:fn "true"}
    :lazy-cat {:macro "true"}
    :lazy-seq {:macro "true"}
    :let {:macro "true"}
    :letfn {:macro "true"}
    :libspec? {:fn "true"}
    :lift-ns {:fn "true"}
    :line-seq {:fn "true"}
    :list {:fn "true"}
    :list* {:fn "true"}
    :list? {:fn "true"}
    :load {:fn "true"}
    :load-all {:fn "true"}
    :load-data-reader-file {:fn "true"}
    :load-data-readers {:fn "true"}
    :load-file {}
    :load-lib {:fn "true"}
    :load-libs {:fn "true"}
    :load-one {:fn "true"}
    :load-reader {:fn "true"}
    :load-string {:fn "true"}
    :loaded-libs {:fn "true"}
    :locking {:macro "true"}
    :long {:fn "true"}
    :long-array {:fn "true"}
    :longs {:fn "true"}
    :loop {:macro "true"}
    :macroexpand {:fn "true"}
    :macroexpand-1 {:fn "true"}
    :make-array {:fn "true"}
    :make-hierarchy {:fn "true"}
    :map {:fn "true"}
    :map-entry? {:fn "true"}
    :map-indexed {:fn "true"}
    :map? {:fn "true"}
    :mapcat {:fn "true"}
    :mapv {:fn "true"}
    :max {:fn "true"}
    :max-key {:fn "true"}
    :max-mask-bits {}
    :max-switch-table-size {}
    :maybe-destructured {:fn "true"}
    :maybe-min-hash {:fn "true"}
    :memfn {:macro "true"}
    :memoize {:fn "true"}
    :merge {:fn "true"}
    :merge-hash-collisions {:fn "true"}
    :merge-with {:fn "true"}
    :meta {:fn "true"}
    :method-sig {:fn "true"}
    :methods {:fn "true"}
    :min {:fn "true"}
    :min-key {:fn "true"}
    :mix-collection-hash {:fn "true"}
    :mk-am {:macro "true"}
    :mk-bound-fn {:fn "true"}
    :mod {:fn "true"}
    :most-specific {:fn "true"}
    :munge {:fn "true"}
    :name {:fn "true"}
    :namespace {:fn "true"}
    :namespace-munge {:fn "true"}
    :nary-inline {:fn "true"}
    :nat-int? {:fn "true"}
    :neg-int? {:fn "true"}
    :neg? {:fn "true"}
    :newline {:fn "true"}
    :next {:fn "true"}
    :nfirst {:fn "true"}
    :nil? {:fn "true"}
    :nnext {:fn "true"}
    :non-private-methods {:fn "true"}
    :normalize-slurp-opts {:fn "true"}
    :not {:fn "true"}
    :not-any? {:fn "true"}
    :not-empty {:fn "true"}
    :not-every? {:fn "true"}
    :not= {:fn "true"}
    :ns {:macro "true"}
    :ns-aliases {:fn "true"}
    :ns-imports {:fn "true"}
    :ns-interns {:fn "true"}
    :ns-map {:fn "true"}
    :ns-name {:fn "true"}
    :ns-publics {:fn "true"}
    :ns-refers {:fn "true"}
    :ns-resolve {:fn "true"}
    :ns-unalias {:fn "true"}
    :ns-unmap {:fn "true"}
    :nth {:fn "true"}
    :nthnext {:fn "true"}
    :nthrest {:fn "true"}
    :num {:fn "true"}
    :number? {:fn "true"}
    :numerator {:fn "true"}
    :object-array {:fn "true"}
    :odd? {:fn "true"}
    :or {:macro "true"}
    :overload-name {:fn "true"}
    :parents {:fn "true"}
    :parse-boolean {:fn "true"}
    :parse-double {:fn "true"}
    :parse-impls {:fn "true"}
    :parse-long {:fn "true"}
    :parse-opts {:fn "true"}
    :parse-opts+specs {:fn "true"}
    :parse-uuid {:fn "true"}
    :parsing-err {:fn "true"}
    :partial {:fn "true"}
    :partition {:fn "true"}
    :partition-all {:fn "true"}
    :partition-by {:fn "true"}
    :partitionv {:fn "true"}
    :partitionv-all {:fn "true"}
    :pcalls {:fn "true"}
    :peek {:fn "true"}
    :persistent! {:fn "true"}
    :pmap {:fn "true"}
    :pop {:fn "true"}
    :pop! {:fn "true"}
    :pop-thread-bindings {:fn "true"}
    :pos-int? {:fn "true"}
    :pos? {:fn "true"}
    :pr {:fn "true"}
    :pr-on {:fn "true"}
    :pr-str {:fn "true"}
    :pref {:fn "true"}
    :prefer-method {:fn "true"}
    :prefers {:fn "true"}
    :prep-hashes {:fn "true"}
    :prep-ints {:fn "true"}
    :prependss {:fn "true"}
    :preserving-reduced {:fn "true"}
    :prim->class {}
    :primitives-classnames {}
    :print {:fn "true"}
    :print-ctor {:fn "true"}
    :print-dup {:fn "true"}
    :print-initialized {}
    :print-map {:fn "true"}
    :print-meta {:fn "true"}
    :print-method {:fn "true"}
    :print-object {:fn "true"}
    :print-prefix-map {:fn "true"}
    :print-sequential {:fn "true"}
    :print-simple {:fn "true"}
    :print-str {:fn "true"}
    :print-tagged-object {:fn "true"}
    :print-throwable {:fn "true"}
    :printf {:fn "true"}
    :println {:fn "true"}
    :println-str {:fn "true"}
    :prn {:fn "true"}
    :prn-str {:fn "true"}
    :process-annotation {:fn "true"}
    :promise {:fn "true"}
    :protected-final-methods {:fn "true"}
    :protocol? {:fn "true"}
    :proxy {:macro "true"}
    :proxy-call-with-super {:fn "true"}
    :proxy-mappings {:fn "true"}
    :proxy-name {:fn "true"}
    :proxy-super {:macro "true"}
    :push-thread-bindings {:fn "true"}
    :pvalues {:macro "true"}
    :qualified-ident? {:fn "true"}
    :qualified-keyword? {:fn "true"}
    :qualified-symbol? {:fn "true"}
    :quot {:fn "true"}
    :rand {:fn "true"}
    :rand-int {:fn "true"}
    :rand-nth {:fn "true"}
    :random-sample {:fn "true"}
    :random-uuid {:fn "true"}
    :range {:fn "true"}
    :ratio? {:fn "true"}
    :rational? {:fn "true"}
    :rationalize {:fn "true"}
    :re-find {:fn "true"}
    :re-groups {:fn "true"}
    :re-matcher {:fn "true"}
    :re-matches {:fn "true"}
    :re-pattern {:fn "true"}
    :re-seq {:fn "true"}
    :read {:fn "true"}
    :read+string {:fn "true"}
    :read-line {:fn "true"}
    :read-string {:fn "true"}
    :reader-conditional {:fn "true"}
    :reader-conditional? {:fn "true"}
    :realized? {:fn "true"}
    :record? {:fn "true"}
    :reduce {:fn "true"}
    :reduce-kv {:fn "true"}
    :reduce1 {:fn "true"}
    :reduced {:fn "true"}
    :reduced? {:fn "true"}
    :reductions {:fn "true"}
    :ref {:fn "true"}
    :ref-history-count {:fn "true"}
    :ref-max-history {:fn "true"}
    :ref-min-history {:fn "true"}
    :ref-set {:fn "true"}
    :refer {:fn "true"}
    :refer-clojure {:macro "true"}
    :reify {:macro "true"}
    :release-pending-sends {:fn "true"}
    :rem {:fn "true"}
    :remove {:fn "true"}
    :remove-all-methods {:fn "true"}
    :remove-method {:fn "true"}
    :remove-ns {:fn "true"}
    :remove-tap {:fn "true"}
    :remove-watch {:fn "true"}
    :repeat {:fn "true"}
    :repeatedly {:fn "true"}
    :replace {:fn "true"}
    :replicate {:deprecated "\"1.3\"" :fn "true"}
    :require {:fn "true"}
    :requiring-resolve {:fn "true"}
    :reset! {:fn "true"}
    :reset-meta! {:fn "true"}
    :reset-vals! {:fn "true"}
    :resolve {:fn "true"}
    :rest {:fn "true"}
    :restart-agent {:fn "true"}
    :resultset-seq {:fn "true"}
    :reverse {:fn "true"}
    :reversible? {:fn "true"}
    :root-directory {:fn "true"}
    :root-resource {:fn "true"}
    :rseq {:fn "true"}
    :rsubseq {:fn "true"}
    :run! {:fn "true"}
    :satisfies? {:fn "true"}
    :second {:fn "true"}
    :select-keys {:fn "true"}
    :send {:fn "true"}
    :send-off {:fn "true"}
    :send-via {:fn "true"}
    :seq {:fn "true"}
    :seq-to-map-for-destructuring {:fn "true"}
    :seq? {:fn "true"}
    :seqable? {:fn "true"}
    :seque {:fn "true"}
    :sequence {:fn "true"}
    :sequential? {:fn "true"}
    :serialized-require {:fn "true"}
    :set {:fn "true"}
    :set-agent-send-executor! {:fn "true"}
    :set-agent-send-off-executor! {:fn "true"}
    :set-error-handler! {:fn "true"}
    :set-error-mode! {:fn "true"}
    :set-validator! {:fn "true"}
    :set? {:fn "true"}
    :setup-reference {:fn "true"}
    :shift-mask {:fn "true"}
    :short {:fn "true"}
    :short-array {:fn "true"}
    :shorts {:fn "true"}
    :shuffle {:fn "true"}
    :shutdown-agents {:fn "true"}
    :sigs {:fn "true"}
    :simple-ident? {:fn "true"}
    :simple-keyword? {:fn "true"}
    :simple-symbol? {:fn "true"}
    :slurp {:fn "true"}
    :some {:fn "true"}
    :some-> {:macro "true"}
    :some->> {:macro "true"}
    :some-fn {:fn "true"}
    :some? {:fn "true"}
    :sort {:fn "true"}
    :sort-by {:fn "true"}
    :sorted-map {:fn "true"}
    :sorted-map-by {:fn "true"}
    :sorted-set {:fn "true"}
    :sorted-set-by {:fn "true"}
    :sorted? {:fn "true"}
    :special-symbol? {:fn "true"}
    :spit {:fn "true"}
    :split-at {:fn "true"}
    :split-with {:fn "true"}
    :splitv-at {:fn "true"}
    :spread {:fn "true"}
    :str {:fn "true"}
    :stream-into! {:fn "true"}
    :stream-reduce! {:fn "true"}
    :stream-seq! {:fn "true"}
    :stream-transduce! {:fn "true"}
    :string? {:fn "true"}
    :strip-ns {:fn "true"}
    :struct {:fn "true"}
    :struct-map {:fn "true"}
    :subs {:fn "true"}
    :subseq {:fn "true"}
    :subvec {:fn "true"}
    :super-chain {:fn "true"}
    :supers {:fn "true"}
    :swap! {:fn "true"}
    :swap-vals! {:fn "true"}
    :symbol {:fn "true"}
    :symbol? {:fn "true"}
    :sync {:macro "true"}
    :system-newline {}
    :tagged-literal {:fn "true"}
    :tagged-literal? {:fn "true"}
    :take {:fn "true"}
    :take-last {:fn "true"}
    :take-nth {:fn "true"}
    :take-while {:fn "true"}
    :tap-loop {}
    :tap> {:fn "true"}
    :tapq {}
    :tapset {}
    :test {:fn "true"}
    :the-array-class {:fn "true"}
    :the-class {:fn "true"}
    :the-ns {:fn "true"}
    :thread-bound? {:fn "true"}
    :throw-if {:fn "true"}
    :time {:macro "true"}
    :to-array {:fn "true"}
    :to-array-2d {:fn "true"}
    :trampoline {:fn "true"}
    :transduce {:fn "true"}
    :transient {:fn "true"}
    :tree-seq {:fn "true"}
    :true? {:fn "true"}
    :type {:fn "true"}
    :unchecked-add {:fn "true"}
    :unchecked-add-int {:fn "true"}
    :unchecked-byte {:fn "true"}
    :unchecked-char {:fn "true"}
    :unchecked-dec {:fn "true"}
    :unchecked-dec-int {:fn "true"}
    :unchecked-divide-int {:fn "true"}
    :unchecked-double {:fn "true"}
    :unchecked-float {:fn "true"}
    :unchecked-inc {:fn "true"}
    :unchecked-inc-int {:fn "true"}
    :unchecked-int {:fn "true"}
    :unchecked-long {:fn "true"}
    :unchecked-multiply {:fn "true"}
    :unchecked-multiply-int {:fn "true"}
    :unchecked-negate {:fn "true"}
    :unchecked-negate-int {:fn "true"}
    :unchecked-remainder-int {:fn "true"}
    :unchecked-short {:fn "true"}
    :unchecked-subtract {:fn "true"}
    :unchecked-subtract-int {:fn "true"}
    :underive {:fn "true"}
    :unquote {}
    :unquote-splicing {}
    :unreduced {:fn "true"}
    :unsigned-bit-shift-right {:fn "true"}
    :update {:fn "true"}
    :update-in {:fn "true"}
    :update-keys {:fn "true"}
    :update-proxy {:fn "true"}
    :update-vals {:fn "true"}
    :uri? {:fn "true"}
    :use {:fn "true"}
    :uuid? {:fn "true"}
    :val {:fn "true"}
    :valid-java-method-name {:fn "true"}
    :validate-fields {:fn "true"}
    :validate-generate-class-options {:fn "true"}
    :vals {:fn "true"}
    :var-get {:fn "true"}
    :var-set {:fn "true"}
    :var? {:fn "true"}
    :vary-meta {:fn "true"}
    :vec {:fn "true"}
    :vector {:fn "true"}
    :vector-of {:fn "true"}
    :vector? {:fn "true"}
    :volatile! {:fn "true"}
    :volatile? {:fn "true"}
    :vreset! {:fn "true"}
    :vswap! {:macro "true"}
    :when {:macro "true"}
    :when-class {:macro "true"}
    :when-first {:macro "true"}
    :when-let {:macro "true"}
    :when-not {:macro "true"}
    :when-some {:macro "true"}
    :while {:macro "true"}
    :with-bindings {:macro "true"}
    :with-bindings* {:fn "true"}
    :with-in-str {:macro "true"}
    :with-loading-context {:macro "true"}
    :with-local-vars {:macro "true"}
    :with-meta {:fn "true"}
    :with-open {:macro "true"}
    :with-out-str {:macro "true"}
    :with-precision {:macro "true"}
    :with-redefs {:macro "true"}
    :with-redefs-fn {:fn "true"}
    :xml-seq {:fn "true"}
    :zero? {:fn "true"}
    :zipmap {:fn "true"}}}
  :clojure.pprint
  {:aliases
   {}
   :interns
   {:*code-table* {}
    :*current-length* {}
    :*current-level* {}
    :*default-page-width* {}
    :*format-str* {}
    :*print-base* {}
    :*print-circle* {}
    :*print-lines* {}
    :*print-miser-width* {}
    :*print-pprint-dispatch* {:fn "true"}
    :*print-pretty* {}
    :*print-radix* {}
    :*print-right-margin* {}
    :*print-shared* {}
    :*print-suppress-namespaces* {}
    :*symbol-map* {}
    :abort? {:fn "true"}
    :absolute-reposition {:fn "true"}
    :absolute-tabulation {:fn "true"}
    :add-core-ns {:fn "true"}
    :add-english-scales {:fn "true"}
    :add-to-buffer {:fn "true"}
    :ancestor? {:fn "true"}
    :arg-navigator {}
    :base-str {:fn "true"}
    :binding-map {:macro "true"}
    :boolean-conditional {:fn "true"}
    :brackets {:fn "true"}
    :buffer-blob {}
    :buffer-blob? {:fn "true"}
    :buffer-length {:fn "true"}
    :c-write-char {:fn "true"}
    :cached-compile {:fn "true"}
    :capitalize-string {:fn "true"}
    :capitalize-word-writer {:fn "true"}
    :check-arg-conditional {:fn "true"}
    :check-enumerated-arg {:fn "true"}
    :check-flags {:fn "true"}
    :choice-conditional {:fn "true"}
    :cl-format {:fn "true"}
    :code-dispatch {:fn "true"}
    :collect-clauses {:fn "true"}
    :column-writer {:fn "true"}
    :compile-directive {:fn "true"}
    :compile-format {:fn "true"}
    :compile-raw-string {:fn "true"}
    :compiled-directive {}
    :conditional-newline {:fn "true"}
    :consume {:fn "true"}
    :consume-while {:fn "true"}
    :convert-ratio {:fn "true"}
    :defdirectives {:macro "true"}
    :deftype {:macro "true"}
    :directive-table {}
    :dollar-float {:fn "true"}
    :downcase-writer {:fn "true"}
    :else-separator? {:fn "true"}
    :emit-nl {:fn "true"}
    :emit-nl? {:fn "true"}
    :end-block {:fn "true"}
    :end-block-t {}
    :end-block-t? {:fn "true"}
    :english-cardinal-tens {}
    :english-cardinal-units {}
    :english-ordinal-tens {}
    :english-ordinal-units {}
    :english-scale-numbers {}
    :execute-format {:fn "true"}
    :execute-sub-format {:fn "true"}
    :expand-fixed {:fn "true"}
    :exponential-float {:fn "true"}
    :extract-flags {:fn "true"}
    :extract-param {:fn "true"}
    :extract-params {:fn "true"}
    :fixed-float {:fn "true"}
    :flag-defs {}
    :float-parts {:fn "true"}
    :float-parts-base {:fn "true"}
    :format-ascii {:fn "true"}
    :format-cardinal-english {:fn "true"}
    :format-error {:fn "true"}
    :format-integer {:fn "true"}
    :format-logical-block {:fn "true"}
    :format-new-roman {:fn "true"}
    :format-old-roman {:fn "true"}
    :format-ordinal-english {:fn "true"}
    :format-roman {:fn "true"}
    :format-simple-cardinal {:fn "true"}
    :format-simple-number {:fn "true"}
    :format-simple-ordinal {:fn "true"}
    :formatter {:macro "true"}
    :formatter-out {:macro "true"}
    :fresh-line {:fn "true"}
    :general-float {:fn "true"}
    :get-column {:fn "true"}
    :get-field {:fn "true"}
    :get-fixed {:fn "true"}
    :get-format-arg {:fn "true"}
    :get-line {:fn "true"}
    :get-max-column {:fn "true"}
    :get-miser-width {:fn "true"}
    :get-pretty-writer {:fn "true"}
    :get-section {:fn "true"}
    :get-sub-section {:fn "true"}
    :get-writer {:fn "true"}
    :getf {:macro "true"}
    :group-by* {:fn "true"}
    :inc-s {:fn "true"}
    :indent {:fn "true"}
    :indent-t {}
    :indent-t? {:fn "true"}
    :init-cap-writer {:fn "true"}
    :init-navigator {:fn "true"}
    :insert-decimal {:fn "true"}
    :insert-scaled-decimal {:fn "true"}
    :integral? {:fn "true"}
    :iterate-list-of-sublists {:fn "true"}
    :iterate-main-list {:fn "true"}
    :iterate-main-sublists {:fn "true"}
    :iterate-sublist {:fn "true"}
    :java-base-formats {}
    :justify-clauses {:fn "true"}
    :level-exceeded {:fn "true"}
    :linear-nl? {:fn "true"}
    :logical-block {}
    :logical-block-or-justify {:fn "true"}
    :ltrim {:fn "true"}
    :make-buffer-blob {:fn "true"}
    :make-end-block-t {:fn "true"}
    :make-indent-t {:fn "true"}
    :make-nl-t {:fn "true"}
    :make-pretty-writer {:fn "true"}
    :make-start-block-t {:fn "true"}
    :map-params {:fn "true"}
    :map-passing-context {:fn "true"}
    :map-ref-type {:fn "true"}
    :miser-nl? {:fn "true"}
    :modify-case {:fn "true"}
    :multi-defn {:fn "true"}
    :needs-pretty {:fn "true"}
    :new-roman-table {}
    :next-arg {:fn "true"}
    :next-arg-or-nil {:fn "true"}
    :nl {:fn "true"}
    :nl-t {}
    :nl-t? {:fn "true"}
    :old-roman-table {}
    :opt-base-str {:fn "true"}
    :orig-pr {:fn "true"}
    :p-write-char {:fn "true"}
    :param-pattern {}
    :parse-lb-options {:fn "true"}
    :plain-character {:fn "true"}
    :pll-mod-body {:fn "true"}
    :pp {:macro "true"}
    :pp-newline {:fn "true"}
    :pprint {:fn "true"}
    :pprint-anon-func {:fn "true"}
    :pprint-array {:fn "true"}
    :pprint-binding-form {:fn "true"}
    :pprint-code-list {:fn "true"}
    :pprint-code-symbol {:fn "true"}
    :pprint-cond {:fn "true"}
    :pprint-condp {:fn "true"}
    :pprint-defn {:fn "true"}
    :pprint-hold-first {:fn "true"}
    :pprint-ideref {:fn "true"}
    :pprint-if {:fn "true"}
    :pprint-indent {:fn "true"}
    :pprint-let {:fn "true"}
    :pprint-list {:fn "true"}
    :pprint-logical-block {:macro "true"}
    :pprint-map {:fn "true"}
    :pprint-meta {:fn "true"}
    :pprint-newline {:fn "true"}
    :pprint-ns {:fn "true"}
    :pprint-ns-reference {:fn "true"}
    :pprint-pqueue {:fn "true"}
    :pprint-reader-macro {:fn "true"}
    :pprint-set {:fn "true"}
    :pprint-simple-code-list {:fn "true"}
    :pprint-simple-default {:fn "true"}
    :pprint-simple-list {:fn "true"}
    :pprint-tab {:fn "true"}
    :pprint-vector {:fn "true"}
    :pr-with-base {:fn "true"}
    :prefix-count {:fn "true"}
    :prerr {:fn "true"}
    :pretty-character {:fn "true"}
    :pretty-writer {:fn "true"}
    :pretty-writer? {:fn "true"}
    :print-length-loop {:macro "true"}
    :print-table {:fn "true"}
    :prlabel {:macro "true"}
    :process-bracket {:fn "true"}
    :process-clause {:fn "true"}
    :process-directive-table-element {:fn "true"}
    :process-nesting {:fn "true"}
    :readable-character {:fn "true"}
    :reader-macros {}
    :realize-parameter {:fn "true"}
    :realize-parameter-list {:fn "true"}
    :relative-reposition {:fn "true"}
    :relative-tabulation {:fn "true"}
    :remainders {:fn "true"}
    :render-clauses {:fn "true"}
    :right-bracket {:fn "true"}
    :round-str {:fn "true"}
    :rtrim {:fn "true"}
    :section {}
    :separator? {:fn "true"}
    :set-field {:fn "true"}
    :set-indent {:fn "true"}
    :set-logical-block-callback {:fn "true"}
    :set-max-column {:fn "true"}
    :set-miser-width {:fn "true"}
    :set-pprint-dispatch {:fn "true"}
    :setf {:macro "true"}
    :simple-dispatch {:fn "true"}
    :single-defn {:fn "true"}
    :special-chars {}
    :special-params {}
    :special-radix-markers {}
    :split-at-newline {:fn "true"}
    :start-block {:fn "true"}
    :start-block-t {}
    :start-block-t? {:fn "true"}
    :table-ize {:fn "true"}
    :tok {:fn "true"}
    :tokens-fit? {:fn "true"}
    :toks {:fn "true"}
    :translate-param {:fn "true"}
    :tuple-map {:fn "true"}
    :two-forms {:fn "true"}
    :type-map {}
    :unzip-map {:fn "true"}
    :upcase-writer {:fn "true"}
    :update-nl-state {:fn "true"}
    :use-method {:fn "true"}
    :walk {:fn "true"}
    :with-pprint-dispatch {:macro "true"}
    :with-pretty-writer {:macro "true"}
    :write {:fn "true"}
    :write-buffered-output {:fn "true"}
    :write-initial-lines {:fn "true"}
    :write-line {:fn "true"}
    :write-option-table {}
    :write-out {:fn "true"}
    :write-to-base {:macro "true"}
    :write-token {:fn "true"}
    :write-token-string {:fn "true"}
    :write-tokens {:fn "true"}
    :write-white-space {:fn "true"}}}
  :conjure.internal
  {:aliases
   {:pp "clojure.pprint"}
   :interns
   {:bounded-conj {:fn "true"}
    :dump-tap-queue! {:fn "true"}
    :enqueue-tap! {:fn "true"}
    :initial-ns {}
    :tap-queue! {}
    :tap-queue-size {}}}
  :user
  {:aliases {} :interns {}}}
 :id
 "04ef028a-c5d2-44d8-bac8-00a5e6ab5e51"
 :repl-type
 "clj"
 :session
 "009bbab1-de19-4cd1-9872-7ce3b57e4566"
 :status
 ["state"]}

Evaluate a fileλ︎

The cursor was moved to the ns form on line 36 of the 01-basics.clj file.

,+e+r to evaluate the ns for which gave the following output.

Output from first evaluation in a new repl session
; --------------------------------------------------------------------------------
; eval (root-form): (ns clojure-through-code.01-basics "Communicate th...
; debug: send
{:code
 "(ns clojure-through-code.01-basics)"
 :id
 "131fa5a4-10ff-41a8-9a51-164ffba78b64"
 :nrepl.middleware.print/options
 {:associative 1 :length 500 :level 50 :right-margin 72}
 :nrepl.middleware.print/print
 "cider.nrepl.pprint/pprint"
 :op
 "eval"
 :session
 "44c3284a-41df-4f7e-a66d-bb30f484db91"}
; debug: send
{:code
 "(ns clojure-through-code.01-basics
  \"Communicate the purpose of a namespace via a doc-string.
   Include descriptions of data models defined in the namespace.\")"
 :column
 1
 :file
 "/home/practicalli/projects/practicalli/clojure-through-code/src/clojure_through_code/01_basics.clj"
 :id
 "e468d5cd-445f-4580-aec5-ce944c4ef3b2"
 :line
 36
 :nrepl.middleware.print/options
 {:associative 1 :length 500 :level 50 :right-margin 72}
 :nrepl.middleware.print/print
 "cider.nrepl.pprint/pprint"
 :ns
 "clojure-through-code.01-basics"
 :op
 "eval"
 :session
 "44c3284a-41df-4f7e-a66d-bb30f484db91"}
; debug: receive
{:id "e468d5cd-445f-4580-aec5-ce944c4ef3b2"
 :ns "clojure-through-code.01-basics"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :status ["namespace-not-found" "done" "error"]}
; Namespace not found: clojure-through-code.01-basics
; debug: receive
{:changed-namespaces
 {:clojure.pprint
  {:aliases
   {}
   :interns
   {:*code-table* {}
    :*current-length* {}
    :*current-level* {}
    :*default-page-width* {}
    :*format-str* {}
    :*print-base* {}
    :*print-circle* {}
    :*print-lines* {}
    :*print-miser-width* {}
    :*print-pprint-dispatch* {:fn "true"}
    :*print-pretty* {}
    :*print-radix* {}
    :*print-right-margin* {}
    :*print-shared* {}
    :*print-suppress-namespaces* {}
    :*symbol-map* {}
    :abort? {:fn "true"}
    :absolute-reposition {:fn "true"}
    :absolute-tabulation {:fn "true"}
    :add-core-ns {:fn "true"}
    :add-english-scales {:fn "true"}
    :add-to-buffer {:fn "true"}
    :ancestor? {:fn "true"}
    :arg-navigator {}
    :base-str {:fn "true"}
    :binding-map {:macro "true"}
    :boolean-conditional {:fn "true"}
    :brackets {:fn "true"}
    :buffer-blob {}
    :buffer-blob? {:fn "true"}
    :buffer-length {:fn "true"}
    :c-write-char {:fn "true"}
    :cached-compile {:fn "true"}
    :capitalize-string {:fn "true"}
    :capitalize-word-writer {:fn "true"}
    :check-arg-conditional {:fn "true"}
    :check-enumerated-arg {:fn "true"}
    :check-flags {:fn "true"}
    :choice-conditional {:fn "true"}
    :cl-format {:fn "true"}
    :code-dispatch {:fn "true"}
    :collect-clauses {:fn "true"}
    :column-writer {:fn "true"}
    :compile-directive {:fn "true"}
    :compile-format {:fn "true"}
    :compile-raw-string {:fn "true"}
    :compiled-directive {}
    :conditional-newline {:fn "true"}
    :consume {:fn "true"}
    :consume-while {:fn "true"}
    :convert-ratio {:fn "true"}
    :defdirectives {:macro "true"}
    :deftype {:macro "true"}
    :directive-table {}
    :dollar-float {:fn "true"}
    :downcase-writer {:fn "true"}
    :else-separator? {:fn "true"}
    :emit-nl {:fn "true"}
    :emit-nl? {:fn "true"}
    :end-block {:fn "true"}
    :end-block-t {}
    :end-block-t? {:fn "true"}
    :english-cardinal-tens {}
    :english-cardinal-units {}
    :english-ordinal-tens {}
    :english-ordinal-units {}
    :english-scale-numbers {}
    :execute-format {:fn "true"}
    :execute-sub-format {:fn "true"}
    :expand-fixed {:fn "true"}
    :exponential-float {:fn "true"}
    :extract-flags {:fn "true"}
    :extract-param {:fn "true"}
    :extract-params {:fn "true"}
    :fixed-float {:fn "true"}
    :flag-defs {}
    :float-parts {:fn "true"}
    :float-parts-base {:fn "true"}
    :format-ascii {:fn "true"}
    :format-cardinal-english {:fn "true"}
    :format-error {:fn "true"}
    :format-integer {:fn "true"}
    :format-logical-block {:fn "true"}
    :format-new-roman {:fn "true"}
    :format-old-roman {:fn "true"}
    :format-ordinal-english {:fn "true"}
    :format-roman {:fn "true"}
    :format-simple-cardinal {:fn "true"}
    :format-simple-number {:fn "true"}
    :format-simple-ordinal {:fn "true"}
    :formatter {:macro "true"}
    :formatter-out {:macro "true"}
    :fresh-line {:fn "true"}
    :general-float {:fn "true"}
    :get-column {:fn "true"}
    :get-field {:fn "true"}
    :get-fixed {:fn "true"}
    :get-format-arg {:fn "true"}
    :get-line {:fn "true"}
    :get-max-column {:fn "true"}
    :get-miser-width {:fn "true"}
    :get-pretty-writer {:fn "true"}
    :get-section {:fn "true"}
    :get-sub-section {:fn "true"}
    :get-writer {:fn "true"}
    :getf {:macro "true"}
    :group-by* {:fn "true"}
    :inc-s {:fn "true"}
    :indent {:fn "true"}
    :indent-t {}
    :indent-t? {:fn "true"}
    :init-cap-writer {:fn "true"}
    :init-navigator {:fn "true"}
    :insert-decimal {:fn "true"}
    :insert-scaled-decimal {:fn "true"}
    :integral? {:fn "true"}
    :iterate-list-of-sublists {:fn "true"}
    :iterate-main-list {:fn "true"}
    :iterate-main-sublists {:fn "true"}
    :iterate-sublist {:fn "true"}
    :java-base-formats {}
    :justify-clauses {:fn "true"}
    :level-exceeded {:fn "true"}
    :linear-nl? {:fn "true"}
    :logical-block {}
    :logical-block-or-justify {:fn "true"}
    :ltrim {:fn "true"}
    :make-buffer-blob {:fn "true"}
    :make-end-block-t {:fn "true"}
    :make-indent-t {:fn "true"}
    :make-nl-t {:fn "true"}
    :make-pretty-writer {:fn "true"}
    :make-start-block-t {:fn "true"}
    :map-params {:fn "true"}
    :map-passing-context {:fn "true"}
    :map-ref-type {:fn "true"}
    :miser-nl? {:fn "true"}
    :modify-case {:fn "true"}
    :multi-defn {:fn "true"}
    :needs-pretty {:fn "true"}
    :new-roman-table {}
    :next-arg {:fn "true"}
    :next-arg-or-nil {:fn "true"}
    :nl {:fn "true"}
    :nl-t {}
    :nl-t? {:fn "true"}
    :old-roman-table {}
    :opt-base-str {:fn "true"}
    :orig-pr {:fn "true"}
    :p-write-char {:fn "true"}
    :param-pattern {}
    :parse-lb-options {:fn "true"}
    :plain-character {:fn "true"}
    :pll-mod-body {:fn "true"}
    :pp {:macro "true"}
    :pp-newline {:fn "true"}
    :pprint {:fn "true"}
    :pprint-anon-func {:fn "true"}
    :pprint-array {:fn "true"}
    :pprint-binding-form {:fn "true"}
    :pprint-code-list {:fn "true"}
    :pprint-code-symbol {:fn "true"}
    :pprint-cond {:fn "true"}
    :pprint-condp {:fn "true"}
    :pprint-defn {:fn "true"}
    :pprint-hold-first {:fn "true"}
    :pprint-ideref {:fn "true"}
    :pprint-if {:fn "true"}
    :pprint-indent {:fn "true"}
    :pprint-let {:fn "true"}
    :pprint-list {:fn "true"}
    :pprint-logical-block {:macro "true"}
    :pprint-map {:fn "true"}
    :pprint-meta {:fn "true"}
    :pprint-newline {:fn "true"}
    :pprint-ns {:fn "true"}
    :pprint-ns-reference {:fn "true"}
    :pprint-pqueue {:fn "true"}
    :pprint-reader-macro {:fn "true"}
    :pprint-set {:fn "true"}
    :pprint-simple-code-list {:fn "true"}
    :pprint-simple-default {:fn "true"}
    :pprint-simple-list {:fn "true"}
    :pprint-tab {:fn "true"}
    :pprint-vector {:fn "true"}
    :pr-with-base {:fn "true"}
    :prefix-count {:fn "true"}
    :prerr {:fn "true"}
    :pretty-character {:fn "true"}
    :pretty-writer {:fn "true"}
    :pretty-writer? {:fn "true"}
    :print-length-loop {:macro "true"}
    :print-table {:fn "true"}
    :prlabel {:macro "true"}
    :process-bracket {:fn "true"}
    :process-clause {:fn "true"}
    :process-directive-table-element {:fn "true"}
    :process-nesting {:fn "true"}
    :readable-character {:fn "true"}
    :reader-macros {}
    :realize-parameter {:fn "true"}
    :realize-parameter-list {:fn "true"}
    :relative-reposition {:fn "true"}
    :relative-tabulation {:fn "true"}
    :remainders {:fn "true"}
    :render-clauses {:fn "true"}
    :right-bracket {:fn "true"}
    :round-str {:fn "true"}
    :rtrim {:fn "true"}
    :section {}
    :separator? {:fn "true"}
    :set-field {:fn "true"}
    :set-indent {:fn "true"}
    :set-logical-block-callback {:fn "true"}
    :set-max-column {:fn "true"}
    :set-miser-width {:fn "true"}
    :set-pprint-dispatch {:fn "true"}
    :setf {:macro "true"}
    :simple-dispatch {:fn "true"}
    :single-defn {:fn "true"}
    :special-chars {}
    :special-params {}
    :special-radix-markers {}
    :split-at-newline {:fn "true"}
    :start-block {:fn "true"}
    :start-block-t {}
    :start-block-t? {:fn "true"}
    :table-ize {:fn "true"}
    :tok {:fn "true"}
    :tokens-fit? {:fn "true"}
    :toks {:fn "true"}
    :translate-param {:fn "true"}
    :tuple-map {:fn "true"}
    :two-forms {:fn "true"}
    :type-map {}
    :unzip-map {:fn "true"}
    :upcase-writer {:fn "true"}
    :update-nl-state {:fn "true"}
    :use-method {:fn "true"}
    :walk {:fn "true"}
    :with-pprint-dispatch {:macro "true"}
    :with-pretty-writer {:macro "true"}
    :write {:fn "true"}
    :write-buffered-output {:fn "true"}
    :write-initial-lines {:fn "true"}
    :write-line {:fn "true"}
    :write-option-table {}
    :write-out {:fn "true"}
    :write-to-base {:macro "true"}
    :write-token {:fn "true"}
    :write-token-string {:fn "true"}
    :write-tokens {:fn "true"}
    :write-white-space {:fn "true"}}}
  :conjure.internal
  {:aliases
   {:pp "clojure.pprint"}
   :interns
   {:bounded-conj {:fn "true"}
    :dump-tap-queue! {:fn "true"}
    :enqueue-tap! {:fn "true"}
    :initial-ns {}
    :tap-queue! {}
    :tap-queue-size {}}}}
 :id
 "e468d5cd-445f-4580-aec5-ce944c4ef3b2"
 :repl-type
 "clj"
 :session
 "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :status
 ["state"]}
; debug: receive
{:id "131fa5a4-10ff-41a8-9a51-164ffba78b64"
 :ns "clojure-through-code.01-basics"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :value "nil"}
; debug: receive
{:id "131fa5a4-10ff-41a8-9a51-164ffba78b64"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :status ["done"]}
; debug: receive
{:changed-namespaces {:clojure-through-code.01-basics {:aliases {} :interns {}}}
 :id "131fa5a4-10ff-41a8-9a51-164ffba78b64"
 :repl-type "clj"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :status ["state"]}

Debug output from evaluating ns form a second time

; --------------------------------------------------------------------------------
; eval (root-form): (ns clojure-through-code.01-basics "Communicate th...
; debug: send
{:code
 "(ns clojure-through-code.01-basics
  \"Communicate the purpose of a namespace via a doc-string.
   Include descriptions of data models defined in the namespace.\")"
 :column
 1
 :file
 "/home/practicalli/projects/practicalli/clojure-through-code/src/clojure_through_code/01_basics.clj"
 :id
 "2ce9b0a7-7733-4974-b5aa-4fd1d1a2e039"
 :line
 36
 :nrepl.middleware.print/options
 {:associative 1 :length 500 :level 50 :right-margin 72}
 :nrepl.middleware.print/print
 "cider.nrepl.pprint/pprint"
 :ns
 "clojure-through-code.01-basics"
 :op
 "eval"
 :session
 "44c3284a-41df-4f7e-a66d-bb30f484db91"}
; debug: receive
{:id "2ce9b0a7-7733-4974-b5aa-4fd1d1a2e039"
 :ns "clojure-through-code.01-basics"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :value "nil"}
nil
; debug: receive
{:id "2ce9b0a7-7733-4974-b5aa-4fd1d1a2e039"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :status ["done"]}
; debug: receive
{:changed-namespaces {}
 :id "2ce9b0a7-7733-4974-b5aa-4fd1d1a2e039"
 :repl-type "clj"
 :session "44c3284a-41df-4f7e-a66d-bb30f484db91"
 :status ["state"]}

Neovimλ︎

Whist creating the journal entry for Conjure debugging there was an increase in system resource use by Neovim. This was caused by the Alex LSP tool which continually parses the text for offensive words.

++spc+"p"+"m" to open the Mason manager in Neovim. X with the cursor on the Alex name to remove the pluging. I could have also used :LspStop but assumed this would stop marksman tool too (which doesnt cause an error).

Neovim Mason plugins updated 2026-02-10

  Installed
     codelldb
     marksman
     selene
     kulala-fmt
     markdownlint
     gh-actions-language-server
     lua-language-server lua_ls
     gh

Zensicalλ︎

I am enjoying using Zensical (a from the ground rewrite of MkDocs and Material for MkDocs) which is currently used for all the practicalli books.

The Zensical docs include install instructions with the standard pip package manager and uv which is a rust language implementation that seems much faster (in my own experience).

The uv instructions seem to focus on Zensical as part of a Python project, which requires a pyproject.toml configuration file and recommends a Python Virtual Environmet.

uv can install packages as a tool, by placing an executable file in ~/.local/bin. This greatly simplifies the command and removes the need for a Python Virtual Environment, a pyproject.toml and uv.lock file.

UV tool Installλ︎

Install the latest version of Zensical as a tool

uv tool install zensical
Output of Zensical tool install
~ ❯ uv tool install zensical
Resolved 7 packages in 1.45s
Prepared 3 packages in 6.72s
Installed 7 packages in 351ms
 + click==8.3.1
 + deepmerge==2.0
 + markdown==3.10.2
 + pygments==2.19.2
 + pymdown-extensions==10.20.1
 + pyyaml==6.0.3
 + zensical==0.0.23
Installed 1 executable: zensical

uv tool command installs binaries in ~/.local/bin/ so this command only needs to run once.

Add Cargo bin to pathλ︎

If ~/.local/bin/ is not already on the execution PATH, then uv shows a warning and the zensical command will not be recognised (without the full path to the file).

warning: `/home/practicalli/.local/share/../bin` is not on your PATH. To use installed tools, run `export PATH="/home/practicalli/.local/share/../bin:$PATH"` or `uv tool update-shell`.

For bash, edit the ~/.bashrc file and add the following

Add local/bin to execution path for bash shell

# Add local bin to system path
export PATH=~/.local/bin/:$PATH

NOTE: Ideally the export would be wrapped in an if expression that tests for the existance of the ~/.local/bin directory.

For Zsh, edit the zshenv file and add ~/.cargo/bin directory to the execution path if that directory exists

Add Cargo bin director to path - Zsh

.zshenv
## Rust local binaries
if [[ -d $HOME/.cargo/bin ]]; then
  path=($HOME/.cargo/bin(/N) $path)
fi

The uv tool install can be passed additional arguments, for example a tool can be upgraded by appending the --upgrade option.

Install or update Zensical as a tool

uv tool install zensical --upgrade

Install specific version of Zensical as a tool

uv tool install zensical==0.0.21

Makefile tasks for Zensicalλ︎

Practicalli uses a Makefile to define tasks to provide a consistent command line interface across all projects, as well as simplifying those commands.

docs-install uses the uv tool approach to install or upgrade zensical. This approach removes the need to have separate tasks for install and upgrade.

# --- Documentation Generation  ------------------ #
docs-install:  ## Install or upgrade Zensical in Python virtual environment
    uv tool install zensical --upgrade

docs:  ## Build and run docs in local server
    $(info -- Local Server --------------------------)
    $(DOCS_SERVER)

docs-open:  ## Build docs, run server & open browser
    $(info -- Local Server & Browser ----------------)
    $(DOCS_SERVER) --open

docs-build:  ## Build docs locally
    $(info -- Build Docs Website --------------------)
    zensical build

docs-debug:  ## Run local server in debug mode
    $(info -- Local Server Debug --------------------)
    $(DOCS_SERVER) -v
# ------------------------------------------------ #

Material for MkDocsλ︎

As I am using Zensical as a tool (uv rather than pip), can I apply the same approach to Material for MkDocs to avoid having two different setups for books?

NOTE: I cannot convert all books as Zensical does not support blogs yet (and may not until later in the year).

Install mkdocs-materail as a toolλ︎

I tried to install mkdocs-material as a tool, but it reports that the mkdocs-material does not contain an executable.

uv tool install mkdocs-material

NOTE: I assume the Pip package pulls in mkdocs executable some how, but the same doesnt seem to work for uv.

mkdocs-material does not include an executable - install failed
❯ uv tool install mkdocs-material
Resolved 29 packages in 480ms
Prepared 29 packages in 4.82s
Installed 29 packages in 322ms
 + babel==2.18.0
 + backrefs==6.1
 + certifi==2026.1.4
 + charset-normalizer==3.4.4
 + click==8.3.1
 + colorama==0.4.6
 + ghp-import==2.1.0
 + idna==3.11
 + jinja2==3.1.6
 + markdown==3.10.2
 + markupsafe==3.0.3
 + mergedeep==1.3.4
 + mkdocs==1.6.1
 + mkdocs-get-deps==0.2.0
 + mkdocs-material==9.7.1
 + mkdocs-material-extensions==1.3.1
 + packaging==26.0
 + paginate==0.5.7
 + pathspec==1.0.4
 + platformdirs==4.9.1
 + pygments==2.19.2
 + pymdown-extensions==10.20.1
 + python-dateutil==2.9.0.post0
 + pyyaml==6.0.3
 + pyyaml-env-tag==1.1
 + requests==2.32.5
 + six==1.17.0
 + urllib3==2.6.3
 + watchdog==6.0.0
No executables are provided by package `mkdocs-material`; removing tool
error: Failed to install entrypoints for `mkdocs-material`

Tools with other pluginsλ︎

Installing the mkdocs package as a tool works, so using the --with option I can add dependencies such as mkdocs-material and other plugins I used to build the Practicalli websites.

The --with option needs to be used for each extra plugin required, which does make the command a little long.

This approach does install mkdocs as a binary and builds an existing Practicalli website without issue.

uv tool install of mkdocs with material plugins

uv tool install --with mkdocs-material --with mkdocs-callouts --with mkdocs-glightbox --with mkdocs-git-revision-date-localized-plugin --with mkdocs-redirects --with mkdocs-rss-plugin --with pillow --with cairosvg mkdocs
Successful MkDocs install with Material plugins
❯ uv tool install --with mkdocs-material --with mkdocs-callouts --with mkdocs-glightbox --with mkdocs-git-revision-date-localized-plugin --with mkdocs-redirects --with mkdocs-rss-plugin --with pillow --with cairosvg mkdocs
Resolved 50 packages in 650ms
Prepared 21 packages in 685ms
Installed 21 packages in 17ms
 + cachecontrol==0.14.4
 + cairocffi==1.7.1
 + cairosvg==2.8.2
 + cffi==2.0.0
 + cssselect2==0.9.0
 + defusedxml==0.7.1
 + filelock==3.24.0
 + gitdb==4.0.12
 + gitpython==3.1.46
 + mkdocs-callouts==1.16.0
 + mkdocs-git-revision-date-localized-plugin==1.5.1
 + mkdocs-glightbox==0.5.2
 + mkdocs-redirects==1.2.2
 + mkdocs-rss-plugin==1.17.9
 + msgpack==1.1.2
 + pillow==12.1.1
 + pycparser==3.0
 + selectolax==0.4.6
 + smmap==5.0.2
 + tinycss2==1.5.1
 + webencodings==0.5.1
Installed 1 executable: mkdocs

Makefile task for uv tool installλ︎

To avoid typing in the very long commands, a collection of Makefile task were created for document generation.

Moving away from a pip and venv virtual environment to a uv tool install approach, the tasks have been greatly simplified.

The python-venv task is no longer required as there is no need for a virtual environment.

The call to activate the Python virtual environment was removed from the start of each task, as the tool is available to the user without a virtual environment.

Updated Makefile using uv tool install approach

# --- Documentation Generation  -------- #
mkdocs-uv-install:
 uv tool install --with mkdocs-material --with mkdocs-callouts --with mkdocs-glightbox --with mkdocs-git-revision-date-localized-plugin --with mkdocs-redirects --with mkdocs-rss-plugin --with pillow --with cairosvg mkdocs

docs: ## Build and run mkdocs in local server
 $(info -- MkDocs Local Server -------------------)
 $(MKDOCS_SERVER)

docs-changed:  ## Build only changed files and run mkdocs in local server (python venv)
 $(info -- Mkdocs Local Server -------------------)
 $(MKDOCS_SERVER) --dirtyreload

docs-build:  ## Build mkdocs (python venv)
 $(info -- Mkdocs Build Website ------------------)
 mkdocs build

docs-debug:  ## Run mkdocs local server in debug mode
 $(info -- Mkdocs Local Server Debug -------------)
 $(MKDOCS_SERVER) -v
# -------------------------------------- #

Debian Linux post install scriptλ︎

Install Material for MkDocs and Zensical via a script after installing a new Debian Linux OS.

Practicalli dotfiles contains post install scripts for setting up an effective set of development tools quickly and easily.

The uv tools install script is currently called uv-tools-install.sh which should be run as the user account. If run as root user (via su - or sudo the tools will only be accessible to the root account).

Uv tools install script for MkDocs & Zensical

echo "# ---------------------------------------"
echo "Install Material for MkDocs as tool with supporting plugins"
uv tool install --with mkdocs-material --with mkdocs-callouts --with mkdocs-glightbox --with mkdocs-git-revision-date-localized-plugin --with mkdocs-redirects --with mkdocs-rss-plugin --with pillow --with cairosvg mkdocs
echo "# ---------------------------------------"

echo ""

echo "# ---------------------------------------"
echo "Install Zensical - updates if already installed"
uv tool install zensical --upgrade
echo "# ---------------------------------------"
Output of tools script - one tool already installed
./uv-tools-install.sh
# ---------------------------------------
Install Material for MkDocs as tool with supporting plugins
`mkdocs` is already installed
# ---------------------------------------


# ---------------------------------------
Install Zensical - updates if already installed
Resolved 7 packages in 340ms
Prepared 7 packages in 3.58s
Installed 7 packages in 346ms
 + click==8.3.1
 + deepmerge==2.0
 + markdown==3.10.2
 + pygments==2.19.2
 + pymdown-extensions==10.20.1
 + pyyaml==6.0.3
 + zensical==0.0.23
Installed 1 executable: zensical
# ---------------------------------------

TUIsλ︎

Most TUIs I have found are written in Rust and publish pre-compiled binaries via GitHub releases.

Using a pre-compiled binary saves a lot of time installing a tui app. I also use DRA to script the install of TUI apps I commonly use.

Where a project does not provide a pre-compiled binary, then its necessary to download the source code and compile locally.

cargo is the tool for managing Rust Language versions, calling the rust compiler and downloading 'crates' (Rust packages/libraries) from the internet.

Install Cargo on Debian Linuxλ︎

Debian has a cargo .deb package, although it is not the latest stable version and should not be used (Debian Stable as of 13 February 2026).

The recommended approach by the Debian Rust team is to install rustup and use that tool to download the latest stable rust compiler and cargo tooling.

Install Rustup on Debian Linux

sudo apt install rustup
Output of install rustup
❯ sudo apt install rustup
Installing:
  rustup

Summary:
  Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 38
  Download size: 2,158 kB
  Space needed: 7,078 kB / 4,425 MB available

Get:1 http://deb.debian.org/debian trixie/main amd64 rustup amd64 1.27.1-3+b1 [2,158 kB]
Fetched 2,158 kB in 0s (8,546 kB/s)
Selecting previously unselected package rustup.
(Reading database ... 233922 files and directories currently installed.)
Preparing to unpack .../rustup_1.27.1-3+b1_amd64.deb ...
Unpacking rustup (1.27.1-3+b1) ...
Setting up rustup (1.27.1-3+b1) ...

Use latest stable Rust release from upstream

rustup default stable
Output of rustup default stable command
❯ rustup default stable
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2026-02-12, rust version 1.93.1 (01f6ddf75 2026-02-11)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
 20.7 MiB /  20.7 MiB (100 %)  16.5 MiB/s in  1s ETA:  0s
info: downloading component 'rust-std'
 28.1 MiB /  28.1 MiB (100 %)  16.3 MiB/s in  1s ETA:  0s
info: downloading component 'rustc'
 74.4 MiB /  74.4 MiB (100 %)  16.4 MiB/s in  4s ETA:  0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 20.7 MiB /  20.7 MiB (100 %)  12.3 MiB/s in  1s ETA:  0s
info: installing component 'rust-std'
 28.1 MiB /  28.1 MiB (100 %)  26.2 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 74.4 MiB /  74.4 MiB (100 %)  26.9 MiB/s in  2s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'

  stable-x86_64-unknown-linux-gnu installed - rustc 1.93.1 (01f6ddf75 2026-02-11)
Installing Debian Linux Cargo package not recommended

The version of cargo and rust compiler in Debian Linux packages is currently v1.85.0. Use the rustup debian package to install the latest stable rust tools.

❯ sudo apt install cargo                                                                                 in 10s261ms   12:48  practicalli󰣚
[sudo] password for practicalli:
Installing:
  cargo

Installing dependencies:
  clang-19        lib32stdc++6            libclang-cpp19      libhttp-parser2.9  libpfm4           libxml2-dev  llvm-19               llvm-19-runtime   python3-yaml
  clang-tools-19  libc6-i386              libclang-rt-19-dev  libobjc-14-dev     libstd-rust-1.85  libz3-dev    llvm-19-dev           llvm-19-tools     rust-llvm
  lib32gcc-s1     libclang-common-19-dev  libgit2-1.9         libobjc4           libstd-rust-dev   lld-19       llvm-19-linker-tools  python3-pygments  rustc

Suggested packages:
  cargo-doc  clang-19-doc  wasi-libc  llvm-19-doc  python-pygments-doc

Summary:
  Upgrading: 0, Installing: 28, Removing: 0, Not Upgrading: 38
  Download size: 167 MB
  Space needed: 966 MB / 4,303 MB available

Compiling locallyλ︎

The YouTui project does not publish pre-compiled binaries. The source code requires rustc 1.91 or newer to compile.

Download the source code, either from the release or by cloning the repository (shallow clone, as the history is not required)

Clone YouTui source code - shallow clone

git clone --depth=1 https://github.com/nick42d/youtui.git
Output of shallow clone
❯ git clone --depth=1 https://github.com/nick42d/youtui.git
Cloning into 'youtui'...
remote: Enumerating objects: 361, done.
remote: Counting objects: 100% (361/361), done.
remote: Compressing objects: 100% (261/261), done.
remote: Total 361 (delta 134), reused 197 (delta 85), pack-reused 0 (from 0)
Receiving objects: 100% (361/361), 3.87 MiB | 5.43 MiB/s, done.
Resolving deltas: 100% (134/134), done.

Compile the source code and generate a binary file, saved to ~/.cargo/bin

Compile youtui and install the resulting binary

cargo install youtui --locked

Compile time was ~ 4 minutes and 30 seconds on an AMD Ryzen™ 7 PRO 4750U.

NOTE: see add cargo bin to path if ~/.cargo/bin directory is not on the execution path already.

Configure YouTUIλ︎

By default YouTUI uses browser authentication, so the cookie from a POST request to music.youtube.com must be copies to the ~/.config/youtui/cookie.txt file. The Cookie value was copies from the Firefox developer tools (F12) > Network tab > Select a POST request > Resource Headers > Cookie

Now I can search for music in YouTUI, but the music will not play (403 forbidden errors).

Copy the examples/config/config.toml file from the YouTui GitHub repository into ~/.config/youtui/config.toml. Edit this config file and use yt-dlp as the download tool (installing yt-dlp if not already available).

YouTUI config file excerpt

# Example config.toml file for youtui containing the application defaults.
auth_type = "Browser"
# downloader_type = "Native" - failing to download
downloader_type = "YtDlp"
yt_dlp_command = "yt-dlp"

Thank you.

🌐 Practical.li Website

Practical.li GitHub Org practicalli-johnny profile

@practicalli@clj.social @practical_li