<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Clojure Q&amp;A - Recent activity</title>
<link>https://ask.clojure.org/index.php/activity</link>
<description></description>
<item>
<title>Commented: Why is clojure.core/derive not commutative?</title>
<link>https://ask.clojure.org/index.php/12878/why-is-clojure-core-derive-not-commutative?show=15213#c15213</link>
<description>This probably should have been a comment on the original question—it isn't an answer to the question.</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12878/why-is-clojure-core-derive-not-commutative?show=15213#c15213</guid>
<pubDate>Fri, 07 Aug 2026 01:06:36 +0000</pubDate>
</item>
<item>
<title>Commented: tools.reader project file version is outdated</title>
<link>https://ask.clojure.org/index.php/15209/tools-reader-project-file-version-is-outdated?show=15211#c15211</link>
<description>I don't understand why anyone would be trying to package JVM libraries, available on Maven Central, for an O/S-level package manager? That makes absolutely no sense. It is not how Clojure libraries are consumed.</description>
<category>tools.reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15209/tools-reader-project-file-version-is-outdated?show=15211#c15211</guid>
<pubDate>Tue, 04 Aug 2026 13:59:45 +0000</pubDate>
</item>
<item>
<title>Edited: destructuring with :keys! and :or</title>
<link>https://ask.clojure.org/index.php/15179/destructuring-with-keys-and-or?show=15179#q15179</link>
<description>&lt;p&gt;I'm trying Clojure 1.13.0-alpha4.  I have a problem with :keys! and :or.  The first example works as expected with the old :keys.  The second example gives me a syntax error when I switch to the new :keys!.  The third example works when I avoid the required key in the defaults. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt; (let [{:keys [a] :or {:a 1}} {:a 2}] a)
 ;=&amp;gt; 2
    
(let [{:keys! [a] :or {:a 1}} {:a 2}] a)
Syntax error macroexpanding let at (REPL:1:1).
Can't supply default value for required key: :a

(let [{:keys! [a] :or {:b 1}} {:a 2}] a)
;=&amp;gt; 2
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15179/destructuring-with-keys-and-or?show=15179#q15179</guid>
<pubDate>Mon, 03 Aug 2026 21:18:14 +0000</pubDate>
</item>
<item>
<title>tools.build copy task does not respect non-replaced-exts</title>
<link>https://ask.clojure.org/index.php/15208/tools-build-copy-task-does-not-respect-non-replaced-exts</link>
<description>&lt;p&gt;It is not possible to tell &lt;code&gt;tools.build&lt;/code&gt; to copy files without substitution for a custom set of file extensions because the &lt;code&gt;copy&lt;/code&gt; function does not actually use its parameter (&lt;code&gt;non-replaced-exts&lt;/code&gt;) - it always uses &lt;code&gt;default-non-replaced-exts&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defn copy
  [{:keys [target-dir src-dirs include replace ignores non-replaced-exts]
    :or {include &quot;**&quot;, ignores default-ignores, non-replaced-exts default-non-replaced-exts}
    :as _params}]
  (let [to-path (.toPath (file/ensure-dir (api/resolve-path target-dir)))
        ignore-regexes (map re-pattern ignores)
        non-replaced (map #(str &quot;.&quot; %) default-non-replaced-exts)]
  ...)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The binding &lt;code&gt;non-replaced-exts&lt;/code&gt; exists and defaults to &lt;code&gt;default-non-replaced-exts&lt;/code&gt; but the function body never uses &lt;code&gt;non-replaced-exts&lt;/code&gt;: it has &lt;code&gt;default-non-replaced-exts&lt;/code&gt; hardcoded.&lt;/p&gt;
&lt;p&gt;A new feature in the next version of &lt;code&gt;deps-new&lt;/code&gt; depends on this working correctly.&lt;/p&gt;
</description>
<category>tools.build</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15208/tools-build-copy-task-does-not-respect-non-replaced-exts</guid>
<pubDate>Sun, 02 Aug 2026 15:39:16 +0000</pubDate>
</item>
<item>
<title>Commented: Concurrency bug in tools.deps use of Aether/Maven libs?</title>
<link>https://ask.clojure.org/index.php/15192/concurrency-bug-in-tools-deps-use-of-aether-maven-libs?show=15207#c15207</link>
<description>Just got the error again:&lt;br /&gt;
&lt;br /&gt;
[org.eclipse.aether.internal.impl.DefaultTrackingFileManager] [] {} Failed to read tracking file '/home/sean/.m2/repository/org/apache/maven/maven-parent/35/_remote.repositories'&lt;br /&gt;
&lt;br /&gt;
[org.eclipse.aether.internal.impl.DefaultTrackingFileManager] [] {} Failed to read tracking file '/home/sean/.m2/repository/org/apache/maven/maven-parent/34/_remote.repositories'</description>
<category>tools.deps</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15192/concurrency-bug-in-tools-deps-use-of-aether-maven-libs?show=15207#c15207</guid>
<pubDate>Wed, 29 Jul 2026 19:13:48 +0000</pubDate>
</item>
<item>
<title>Answered: Add assoc-some for constructing maps while skipping nil values</title>
<link>https://ask.clojure.org/index.php/15184/add-assoc-some-for-constructing-maps-while-skipping-values?show=15204#a15204</link>
<description>&lt;p&gt;We have an existing jira for this idea at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2707&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2707&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15184/add-assoc-some-for-constructing-maps-while-skipping-values?show=15204#a15204</guid>
<pubDate>Mon, 27 Jul 2026 13:09:36 +0000</pubDate>
</item>
<item>
<title>Commented: `(nth nil 10)` returns `nil` when it should throw</title>
<link>https://ask.clojure.org/index.php/15195/nth-nil-10-returns-nil-when-it-should-throw?show=15203#c15203</link>
<description>In general, there is a philosophy in Clojure core functions of aggressive polymorphism - making different types of collection (or nil) do something useful. For collection retrieval functions in particular, returning nil (rather than throwing) allows you to chain retrievals through deep data structures and bottom out at nil via the various &amp;quot;some&amp;quot; functions (like `some-&amp;gt;`) OR to do nil-punning conditional logic on nil.&lt;br /&gt;
&lt;br /&gt;
I've logged as &lt;a href=&quot;https://clojure.atlassian.net/browse/CLJ-2971&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2971&lt;/a&gt;</description>
<category>Collections</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15195/nth-nil-10-returns-nil-when-it-should-throw?show=15203#c15203</guid>
<pubDate>Thu, 23 Jul 2026 17:26:59 +0000</pubDate>
</item>
<item>
<title>Closed: When using remote prepl server, *repl* is false, preventing use of add-lib and related functions</title>
<link>https://ask.clojure.org/index.php/14374/using-remote-prepl-server-false-preventing-related-functions?show=14374#q14374</link>
<description>&lt;p&gt;To reproduce:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;clojure -J-Dclojure.server.jvm=&quot;{:port 5555 :accept clojure.core.server/io-prepl}&quot;

Clojure 1.12.0
user=&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nc localhost 5555
*repl*
{:tag :ret, :val &quot;false&quot;, :ns &quot;user&quot;, :ms 0, :form &quot;*repl*&quot;}
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>REPL</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14374/using-remote-prepl-server-false-preventing-related-functions?show=14374#q14374</guid>
<pubDate>Tue, 21 Jul 2026 19:32:37 +0000</pubDate>
</item>
<item>
<title>Closed: Improve javadoc especially for tool usage</title>
<link>https://ask.clojure.org/index.php/14715/improve-javadoc-especially-for-tool-usage?show=14715#q14715</link>
<description>&lt;p&gt;In order to provide a hot key in VS Code to show the JavaDocs associated with a selected form (class name or the type of an expression), I wrote the following Joyride script:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/seancorfield/vscode-calva-setup/blob/develop/joyride/scripts/javadoc.cljs#L15&quot;&gt;https://github.com/seancorfield/vscode-calva-setup/blob/develop/joyride/scripts/javadoc.cljs#L15&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This highlights three issues that could be addressed/improved:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;On JDKs later than 15, the javadoc machinery falls back to JDK 8, unless you explicitly call &lt;code&gt;add-remote-javadoc&lt;/code&gt; for at least &lt;code&gt;java.&lt;/code&gt; and &lt;code&gt;javax.&lt;/code&gt;. This is a known issue that should be addressed in Clojure 1.13 per &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2920&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2920&lt;/a&gt; -- hopefully it will assume the URL structure for JDKs going forward so we don't run into this problem again, unless Oracle changes their URL structure again (hopefully, unlikely).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;javadoc-url&lt;/code&gt; is private so tools have to use &lt;code&gt;#'&lt;/code&gt; to access it, which makes it feel like this is just an implementation detail and subject to change. It would be nice for tools if this was part of the public, documented API for &lt;code&gt;clojure.java.javadoc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inner classes are not handled well. If you ask for the &lt;code&gt;javadoc-url&lt;/code&gt; for &lt;code&gt;java.util.Map$Entry&lt;/code&gt;, you get a URL with &lt;code&gt;Map$Entry.html&lt;/code&gt; which doesn't exist. Since inner classes are documented in their outer class, removing &lt;code&gt;$[a-zA-Z0-9_]+&lt;/code&gt; from the class name or from the URL would really help here.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here's an example REPL session for Clojure 1.12.2 on JDK 24, showing these issues:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;user=&amp;gt; (clojure-version)
&quot;1.12.2&quot;
user=&amp;gt; (require 'clojure.java.javadoc)
nil
user=&amp;gt; (#'clojure.java.javadoc/javadoc-url &quot;java.util.concurrent.ExecutionException&quot;)
&quot;http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html&quot;
user=&amp;gt; (#'clojure.java.javadoc/javadoc-url &quot;java.util.Map$Entry&quot;)
&quot;http://docs.oracle.com/javase/8/docs/api/java/util/Map$Entry.html&quot;
user=&amp;gt; &lt;/code&gt;&lt;/p&gt;
</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14715/improve-javadoc-especially-for-tool-usage?show=14715#q14715</guid>
<pubDate>Tue, 21 Jul 2026 19:31:26 +0000</pubDate>
</item>
<item>
<title>JVM-parity bug in how :clojure.datafy/class is set in clojureCLR</title>
<link>https://ask.clojure.org/index.php/15191/jvm-parity-bug-in-how-clojure-datafy-class-is-set-clojureclr</link>
<description>&lt;p&gt;As I was working on the &lt;code&gt;magic&lt;/code&gt; compiler (the compiler to build to il2cpp in Unity), I noticed i was not having the same behaviour for datafy than clojureCLR.&lt;/p&gt;
&lt;p&gt;In fact, we found a small JVM-parity bug in &lt;code&gt;clojure.datafy/datafy&lt;/code&gt;, in how &lt;code&gt;:clojure.datafy/class&lt;/code&gt; is set in ClojureCLR:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;;; JVM clojure (datafy.clj) : fully qualified name, e.g. my.ns.CombinationB
(vary-meta v assoc ::obj x ::class (-&amp;gt; x class .getName symbol))

;; MAGIC's port : .FullName is the CLR equivalent of .getName, so same result
(vary-meta v assoc ::obj x ::class (-&amp;gt; x class .FullName symbol))

;; ClojureCLR (Clojure.Source/clojure/datafy.clj) : .Name is only the short name,
;; e.g. CombinationB, so the namespace is lost
(vary-meta v assoc ::obj x ::class (-&amp;gt; x class .Name symbol))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This breaks code that resolves the class back from the metadata (e.g. reconstructing records from datafied data ). The fix is small change: &lt;code&gt;.Name&lt;/code&gt; → &lt;code&gt;.FullName&lt;/code&gt;.&lt;/p&gt;
</description>
<category>ClojureCLR</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15191/jvm-parity-bug-in-how-clojure-datafy-class-is-set-clojureclr</guid>
<pubDate>Tue, 21 Jul 2026 06:27:09 +0000</pubDate>
</item>
<item>
<title>Answered: Possible bug in conditional with NaN comparison</title>
<link>https://ask.clojure.org/index.php/15174/possible-bug-in-conditional-with-nan-comparison?show=15190#a15190</link>
<description>&lt;p&gt;It's definitely a bug. Will be fixed in the next release.  (I'll have a new alpha out this week, but plan to do a GA release toward the end of the week.) &lt;/p&gt;
&lt;p&gt;For those who like details:&lt;/p&gt;
&lt;p&gt;It's a bug that only occurs when calling a one of &amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;= on two arguments in a context where both arguments have known types and the types are both double, and the context of the call is the test in a conditional.  So only when we have something like &lt;code&gt;(if (&amp;lt;= ^double x ^double y) ... )&lt;/code&gt;.  And the generated code gives an incorrect answer only when one or both of the arguments is NaN.  &lt;/p&gt;
&lt;p&gt;Why? (Asks no one.)&lt;/p&gt;
&lt;p&gt;Both the ClojureJVM and ClojureCLR compilers detect calls to numeric comparison operators as the test of a conditional and replace a static method call with an equivalent sequence of direct bytecode/MSIL instructions.   The ClojureCLR code copied the comparator code for integer arguments when doing the double, which involved a negation.  For integers, the negation of a &amp;lt;= is &amp;gt;.  That is not true for doubles, when an argument is NaN.  Brain cramp.&lt;/p&gt;
</description>
<category>ClojureCLR</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15174/possible-bug-in-conditional-with-nan-comparison?show=15190#a15190</guid>
<pubDate>Mon, 20 Jul 2026 14:29:43 +0000</pubDate>
</item>
<item>
<title>Answered: Implement ^:async (CLJS) for protocol functions and multi-methods</title>
<link>https://ask.clojure.org/index.php/15187/implement-async-cljs-for-protocol-functions-multi-methods?show=15189#a15189</link>
<description>&lt;p&gt;As this isn't going to be supported (yet) a workaround that you can use everywhere is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;((^:async fn [] ...your method body here...))
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15187/implement-async-cljs-for-protocol-functions-multi-methods?show=15189#a15189</guid>
<pubDate>Sun, 19 Jul 2026 15:59:04 +0000</pubDate>
</item>
<item>
<title>Commented: Support for automatic promotion to BigDecimal in +', *', etc.</title>
<link>https://ask.clojure.org/index.php/14752/support-for-automatic-promotion-to-bigdecimal-in-etc?show=15178#c15178</link>
<description>It’s in the queue for 1.13</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14752/support-for-automatic-promotion-to-bigdecimal-in-etc?show=15178#c15178</guid>
<pubDate>Tue, 14 Jul 2026 03:49:51 +0000</pubDate>
</item>
<item>
<title>Answered: require yields confusing &quot;namespace ... not found after loading ...&quot; error if masked by empty test file</title>
<link>https://ask.clojure.org/index.php/15173/require-yields-confusing-namespace-found-after-loading-masked?show=15176#a15176</link>
<description>&lt;p&gt;I realize that I made a mistake, the test file should have been named &lt;code&gt;llm_test.clj&lt;/code&gt; instead of &lt;code&gt;llm.clj&lt;/code&gt;. Nevertheless the compiler error message could be more user-friendly, perhaps by including the full path to the problematic file.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15173/require-yields-confusing-namespace-found-after-loading-masked?show=15176#a15176</guid>
<pubDate>Tue, 14 Jul 2026 01:43:38 +0000</pubDate>
</item>
<item>
<title>Commented: Somewhat confusing sorted-set behavior</title>
<link>https://ask.clojure.org/index.php/11409/somewhat-confusing-sorted-set-behavior?show=15175#c15175</link>
<description>This issue bites us at least once or twice a year. The latest one is `(dissoc a-sorted-map :foo)`, which throws when `a-sorted-map` doesn't contain `:foo` instead of just returning `a-sorted-map` unchanged. A fix would be highly appreciated.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Use a different comparator&amp;quot; is often not an option because the sorted-map can come from code outside your control.&lt;br /&gt;
&lt;br /&gt;
Our workaround is using `(into (empty x) (remove #(= :foo (key %)) x)` instead of `dissoc`</description>
<category>Collections</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/11409/somewhat-confusing-sorted-set-behavior?show=15175#c15175</guid>
<pubDate>Mon, 13 Jul 2026 21:49:41 +0000</pubDate>
</item>
<item>
<title>Answer selected: Additional handling for `&amp;` symbol in map destructuring for :keys/:syms/:strs could be a breaking change.</title>
<link>https://ask.clojure.org/index.php/15171/additional-handling-symbol-destructuring-breaking-change?show=15172#a15172</link>
<description>&lt;p&gt;Yes, the intent here is to carve this out of being allowed so it is available for syntax purposes in destructuring. We did a fair amount of searching and do not see this being used anywhere. &lt;/p&gt;
&lt;p&gt;We've updated the reference page at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/reference/reader#_symbols&quot;&gt;https://clojure.org/reference/reader#_symbols&lt;/a&gt; to explicitly note this.&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15171/additional-handling-symbol-destructuring-breaking-change?show=15172#a15172</guid>
<pubDate>Thu, 09 Jul 2026 16:08:08 +0000</pubDate>
</item>
<item>
<title>Browser REPL on different port</title>
<link>https://ask.clojure.org/index.php/15170/browser-repl-on-different-port</link>
<description>&lt;p&gt;Clojurescript's built-in browser REPL is on port 9000 by default but that clashes with ZScaler on my work laptop so I use port 8090 instead. It took a few goes to get it working but now I have it sorted.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;clojure -M -m cljs.main -v -p 8090 -co '{:closure-defines {&quot;clojure.browser.repl.PORT&quot; 8090}}' -c foo.core -r&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;There are some points in the documentation that might benefit from clarification. The &lt;code&gt;-p&lt;/code&gt; flag is not mentioned on &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurescript.org/reference/repl-and-main&quot;&gt;The REPL and main entry points&lt;/a&gt; but seems to serve the same purpose as :port described on &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurescript.org/reference/repl-options&quot;&gt;REPL Options&lt;/a&gt; because this also works:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;clojure -M -m cljs.main -v -ro '{:port 8090}' -co '{:closure-defines {&quot;clojure.browser.repl.PORT&quot; 8090}}' -c foo.core -r&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What is a little bit surprising is that :port is only mentioned under the Node REPL Options section but applies to browser REPLs too.&lt;/p&gt;
&lt;p&gt;Not really a question in all this but I wanted to share this for others who might get stuck.&lt;/p&gt;
&lt;p&gt;Versions for posterity: Clojure CLI version (deps.clj) 1.12.2.1565 on Windows 11 and ClojureScript 1.11.54.&lt;/p&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15170/browser-repl-on-different-port</guid>
<pubDate>Wed, 08 Jul 2026 07:16:39 +0000</pubDate>
</item>
<item>
<title>Commented: Weird install paths can break linux-install.sh or posix-install.sh scripts</title>
<link>https://ask.clojure.org/index.php/15164/weird-install-paths-break-linux-install-posix-install-scripts?show=15169#c15169</link>
<description>This is Ubuntu 24.04.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ uname -a&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux BIG02-fgabolde 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15164/weird-install-paths-break-linux-install-posix-install-scripts?show=15169#c15169</guid>
<pubDate>Tue, 07 Jul 2026 08:51:14 +0000</pubDate>
</item>
<item>
<title>Commented: Namespaced map conversion fails when namespace keyword starts with a number</title>
<link>https://ask.clojure.org/index.php/15159/namespaced-conversion-fails-namespace-keyword-starts-number?show=15168#c15168</link>
<description>It is not valid Clojure, but it is not rejected in all situations, so it should not be relied on. There are some widely used Clojure libraries out there that assume it is not rejected in certain situations, so banning it is problematic—but also do not expect any changes that make it more widely accepted.</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15159/namespaced-conversion-fails-namespace-keyword-starts-number?show=15168#c15168</guid>
<pubDate>Mon, 06 Jul 2026 21:14:56 +0000</pubDate>
</item>
<item>
<title>Answered: Will :keys! work with nested maps?</title>
<link>https://ask.clojure.org/index.php/15160/will-keys-work-with-nested-maps?show=15166#a15166</link>
<description>&lt;p&gt;If we try that code in a REPL, we see that it complains about &lt;code&gt;:e&lt;/code&gt; being missing:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;user=&amp;gt; (let [sample-map {:a 1 :b {:a 2 :b 3 :c 4 :d 42}}
             {a :a {aa :a :as m :keys! [b c &amp;amp; d e]} :b} (dissoc sample-map :c)] b)
Execution error (IllegalArgumentException) at user/eval126 (REPL:1).
Missing required key: :e
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But the test is weird because &lt;code&gt;sample-map&lt;/code&gt; doesn't actually have a &lt;code&gt;:c&lt;/code&gt; key at the top level, only nested under &lt;code&gt;:b&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In answer to your overall question, yes, &lt;code&gt;:keys!&lt;/code&gt; works anywhere that &lt;code&gt;:keys&lt;/code&gt; already works, and that includes nested map destructuring.&lt;/p&gt;
&lt;p&gt;Here's an example from our code at work:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  [{:keys! [worldsingles-application members actioner database]
    {:keys! [&amp;amp; redis-pubsub] pubsub :redis-pubsub} :worldsingles-application
    :as service}]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This checks that &lt;code&gt;:redis-pubsub&lt;/code&gt; is a key under &lt;code&gt;:worldsingles-application&lt;/code&gt; which is a key of &lt;code&gt;service&lt;/code&gt;, but does not bind &lt;code&gt;redis-pubsub&lt;/code&gt;, and also binds &lt;code&gt;pubsub&lt;/code&gt; to the &lt;code&gt;:redis-pubsub&lt;/code&gt; key. Yes, we have Alpha 2 in  production and this code used to be multiple &lt;code&gt;let&lt;/code&gt; bindings and explicit checks for keys being present.&lt;/p&gt;
</description>
<category>Test</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15160/will-keys-work-with-nested-maps?show=15166#a15166</guid>
<pubDate>Mon, 06 Jul 2026 16:08:02 +0000</pubDate>
</item>
<item>
<title>Closed: error printed using pprint in clojure 1.13.0-alpha1</title>
<link>https://ask.clojure.org/index.php/15153/error-printed-using-pprint-in-clojure-1-13-0-alpha1?show=15153#q15153</link>
<description>&lt;pre&gt;&lt;code&gt;❯ clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version &quot;1.13.0-alpha1&quot;}}}'
Clojure 1.13.0-alpha1
user=&amp;gt; (clojure.pprint/pprint :foo)
Execution error (ClassCastException) at clojure.pprint.proxy$java.io.Writer$IDeref$PrettyFlush$4923d848/flush (REPL:-1).
class clojure.pprint.proxy$java.io.Writer$IDeref$PrettyFlush$4923d848 cannot be cast to class clojure.pprint.PrettyFlush (clojure.pprint.proxy$java.io.Writer$IDeref$PrettyFlush$4923d848 is in unnamed module of loader 'app'; clojure.pprint.PrettyFlush is in unnamed module of loader clojure.lang.DynamicClassLoader @36a58466)
:foo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;reported by djblue in #clojure-dev&lt;/p&gt;
</description>
<category>Printing</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15153/error-printed-using-pprint-in-clojure-1-13-0-alpha1?show=15153#q15153</guid>
<pubDate>Fri, 03 Jul 2026 17:10:34 +0000</pubDate>
</item>
<item>
<title>Commented: Possibly avoidable identity call to force instance method on Class literals</title>
<link>https://ask.clojure.org/index.php/15155/possibly-avoidable-identity-force-instance-method-literals?show=15157#c15157</link>
<description>Why is this important?</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15155/possibly-avoidable-identity-force-instance-method-literals?show=15157#c15157</guid>
<pubDate>Fri, 03 Jul 2026 17:09:38 +0000</pubDate>
</item>
<item>
<title>Edited: Changing type tags can lead to cryptic errors</title>
<link>https://ask.clojure.org/index.php/15124/changing-type-tags-can-lead-to-cryptic-errors?show=15124#q15124</link>
<description>&lt;p&gt;Reporting this as an example of a particularly cryptic error message. Admittedly not the most common thing, but when doing REPL-driven dev with code that uses primitive type tags it can happen.&lt;/p&gt;
&lt;p&gt;The issue here as I understand it is that &lt;code&gt;IFn&lt;/code&gt; contains a few hundred interfaces with some permutation of primitive input and output types, with names like &lt;code&gt;LLO&lt;/code&gt; and &lt;code&gt;ODOL&lt;/code&gt;. Functions that call this are compiled to call the primitive interface to avoid boxing,rather than the generic IFn. If the function is then redefined without or with different primitive tags, then the compiled calling code is no longer calling the right interface.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defn foo ^long [^long x]
  x)

(defn bar []
  (+ (foo 3) (foo 4)))

(bar)

(defn foo [x] x)

(bar) ;;=&amp;gt; throws: class my.ns$foo cannot be cast to class  clojure.lang.IFn$LL
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15124/changing-type-tags-can-lead-to-cryptic-errors?show=15124#q15124</guid>
<pubDate>Fri, 03 Jul 2026 09:58:25 +0000</pubDate>
</item>
<item>
<title>Edited: Syntax-quoted lists can return nil, differs from ClojureScript</title>
<link>https://ask.clojure.org/index.php/15152/syntax-quoted-lists-can-return-differs-from-clojurescript?show=15152#q15152</link>
<description>&lt;p&gt;Syntax quoted lists can return &lt;code&gt;nil&lt;/code&gt; if only empty seqables are spliced into it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Clojure 1.12.5
user=&amp;gt; `(~@[])
nil
user=&amp;gt; `(~@[] ~@[])
nil
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However, the implementation then ensures syntax-quoted empty lists are not nil:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Clojure 1.12.5
user=&amp;gt; `()
()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ClojureScript returns an empty list in these cases:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;`(~@[])
=&amp;gt; ()
`(~@[] ~@[])
=&amp;gt; ()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The expansion of syntax quote itself is not necessarily a problem if it differs between platforms, but here the evaluation of the expansion differs. This can cause macros to behave differently between platforms (e.g., JVM Clojure vs bootstrapped cljs).&lt;/p&gt;
&lt;p&gt;This behavior seems to be present with all versions of Clojure &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure/clojure/blob/f85444e6f890eb585e598efefdbd84727427e0a4/src/jvm/clojure/lang/LispReader.java#L731&quot;&gt;including 1.0.0&lt;/a&gt;, so perhaps the ship has sailed here. I went searching for an existing issue or documentation and AFAICT only &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-1425&quot;&gt;CLJ-1425&lt;/a&gt; mentions this oddity.&lt;/p&gt;
&lt;p&gt;The reference docs for &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.org/reference/reader#syntax-quote&quot;&gt;Syntax Quote&lt;/a&gt; also seem to contradict this behavior:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;For Lists/Vectors/Sets/Maps, syntax-quote establishes a template of the corresponding data structure.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15152/syntax-quoted-lists-can-return-differs-from-clojurescript?show=15152#q15152</guid>
<pubDate>Sun, 28 Jun 2026 21:35:41 +0000</pubDate>
</item>
<item>
<title>Commented: How to fix error 'could not acquire write lock for 'artifact:org.bytedeco:opencv:4.5.5-1.5.7' ?</title>
<link>https://ask.clojure.org/index.php/12730/error-could-acquire-write-lock-artifact-org-bytedeco-opencv?show=15151#c15151</link>
<description>That is great to hear, thanks for the feedback!</description>
<category>tools.deps</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12730/error-could-acquire-write-lock-artifact-org-bytedeco-opencv?show=15151#c15151</guid>
<pubDate>Fri, 26 Jun 2026 20:37:35 +0000</pubDate>
</item>
<item>
<title>Closed: Why do literal vectors ignore type hinting?</title>
<link>https://ask.clojure.org/index.php/15136/why-do-literal-vectors-ignore-type-hinting?show=15136#q15136</link>
<description>&lt;p&gt;When calling a method on an instance of a Java class that takes a &lt;code&gt;Collection&amp;lt;? extends Something&amp;gt;&lt;/code&gt; as the argument, I've tried the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(.theMethod ^SomeClass inst ^Collection [thing1 thing2])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unfortunately, when I'm using &lt;code&gt;lein check&lt;/code&gt; this gives me a reflection warning of:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;call to method theMethod on example.SomeClass can't be resolved (argument types: clojure.lang.IPersistentVector).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I can fix this by binding it to a symbol with a type hint:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(let [^Collection things [thing1 thing2]]
  (.theMethod ^SomeClass inst things))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What is going on that the literal vector can't be type-hinted in place?&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15136/why-do-literal-vectors-ignore-type-hinting?show=15136#q15136</guid>
<pubDate>Mon, 22 Jun 2026 18:05:43 +0000</pubDate>
</item>
<item>
<title>Closed: Can't type hint literal collection containing runtime values</title>
<link>https://ask.clojure.org/index.php/4259/cant-type-hint-literal-collection-containing-runtime-values?show=4259#q4259</link>
<description>&lt;p&gt;Currently type hints on literals containing runtime values are lost:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
user=&amp;gt; (set! &lt;em&gt;warn-on-reflection&lt;/em&gt; true)&lt;br&gt;
true&lt;br&gt;
user=&amp;gt; (fn [x] (java.util.HashMap. ^java.util.Map {&quot;foo&quot; x}))&lt;br&gt;
Reflection warning, null:1:9 - call to java.util.HashMap ctor can't be resolved.&lt;/p&gt;
&lt;h2&gt;function[user/eval7479/fn--7480]&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A workaround that currently works is to introduce a local and type hint the binding&lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
user=&amp;gt; (fn [x] (let [^java.util.Map m {&quot;foo&quot; x}] (java.util.HashMap. m)))&lt;/p&gt;
&lt;h2&gt;function[user/eval7487/fn--7488]&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The attached patch fixes this issue by tracking type hints for literal values, making the reflection go away even in the original case&lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
user=&amp;gt; (set! &lt;em&gt;warn-on-reflection&lt;/em&gt; true)&lt;br&gt;
true&lt;br&gt;
user=&amp;gt; (fn [x] (java.util.HashMap. ^java.util.Map {&quot;foo&quot; x}))&lt;/p&gt;
&lt;h2&gt;function[user/eval7479/fn--7480]&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Approach:&lt;/strong&gt; preserve user hints in literal collections&lt;br&gt;
&lt;strong&gt;Patch&lt;/strong&gt;: 0001-CLJ-1929-preserve-type-hints-in-literals.patch&lt;/p&gt;
</description>
<category>Compiler</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/4259/cant-type-hint-literal-collection-containing-runtime-values?show=4259#q4259</guid>
<pubDate>Mon, 22 Jun 2026 18:05:06 +0000</pubDate>
</item>
<item>
<title>Closed: clj risk of automatic dependency update causing RCE</title>
<link>https://ask.clojure.org/index.php/15140/clj-risk-of-automatic-dependency-update-causing-rce?show=15140#q15140</link>
<description>&lt;p&gt;I think we should consider enforcing some mechanism to prevent automatic, ai-induced dependency downloading to enable abusers to cause automatic execution of arbitrary code any time a user of AI updates any dependency graph.&lt;/p&gt;
&lt;p&gt;NPM is currently getting abused frequently via this vector.&lt;/p&gt;
&lt;p&gt;NPM has the unfortunate aspect that when you run &lt;code&gt;npm install&lt;/code&gt; it will enable code execution of code provided by a third-party.&lt;/p&gt;
&lt;p&gt;In the age of AI, a hacker could pose as a library useful for something, and do remote code execution via the ability to do something seemingly innocuous and very common in a workplace environment.&lt;/p&gt;
&lt;p&gt;Corporate sabotagists could easily take advantage of this mechanism of compromise and infiltrate common corporate environments.&lt;/p&gt;
</description>
<category>Clojure CLI</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15140/clj-risk-of-automatic-dependency-update-causing-rce?show=15140#q15140</guid>
<pubDate>Mon, 22 Jun 2026 17:59:09 +0000</pubDate>
</item>
<item>
<title>Answered: how to run a clojurescript repl</title>
<link>https://ask.clojure.org/index.php/15134/how-to-run-a-clojurescript-repl?show=15145#a15145</link>
<description>&lt;p&gt;This is covered in the QuickStart &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurescript.org/guides/quick-start&quot;&gt;https://clojurescript.org/guides/quick-start&lt;/a&gt; and there is a REPL category under Reference same as clojure.org.&lt;/p&gt;
&lt;p&gt;Anything we could do that would make this easier for you to find?&lt;/p&gt;
</description>
<category>ClojureScript</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15134/how-to-run-a-clojurescript-repl?show=15145#a15145</guid>
<pubDate>Wed, 17 Jun 2026 14:35:29 +0000</pubDate>
</item>
<item>
<title>Answered: Why is aset at least 25 times faster than aset-long?</title>
<link>https://ask.clojure.org/index.php/15138/why-is-aset-at-least-25-times-faster-than-aset-long?show=15139#a15139</link>
<description>&lt;p&gt;We’ve spent a bunch of time on this and got into some surprising places with it. I am very much hoping all these set functions will be rewritten in next release.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15138/why-is-aset-at-least-25-times-faster-than-aset-long?show=15139#a15139</guid>
<pubDate>Mon, 15 Jun 2026 17:05:19 +0000</pubDate>
</item>
<item>
<title>Commented: Can clojure builds be reproducible? (new Debian forky requirement)</title>
<link>https://ask.clojure.org/index.php/15083/can-clojure-builds-reproducible-debian-forky-requirement?show=15133#c15133</link>
<description>Yes, you need to bootstrap Clojure 1.9+ using an existing version of Clojure, if you're compiling it.&lt;br /&gt;
&lt;br /&gt;
I have to admit, I still don't really understand why distros/package manager folks insist on trying to do this with things that are essentially just libraries on Maven Central? You risk creating builds of Clojure that are not the same as what the vast majority of people just download from Maven as project dependencies.</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15083/can-clojure-builds-reproducible-debian-forky-requirement?show=15133#c15133</guid>
<pubDate>Fri, 12 Jun 2026 16:15:43 +0000</pubDate>
</item>
<item>
<title>Closed: Implement reader literal and print support for PersistentQueue data structure</title>
<link>https://ask.clojure.org/index.php/3365/implement-reader-literal-support-persistentqueue-structure?show=3365#q3365</link>
<description>&lt;p&gt;Clojure's PersistentQueue structure has been in the language for quite some time now and has found its way into a fair share of codebases. However, the creation of queues is a two step operation often of the form:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
(conj clojure.lang.PersistentQueue/EMPTY :a :b :c)&lt;/p&gt;
&lt;p&gt;;=&amp;gt; #&lt;br&gt;
&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;A better experience might be the following:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;queue [:a :b :c]&lt;/h2&gt;
&lt;p&gt;;=&amp;gt; #queue [:a :b :c]&lt;/p&gt;
&lt;p&gt;(pop #queue [:a :b :c])&lt;/p&gt;
&lt;p&gt;;=&amp;gt; #queue [:b :c]&lt;br&gt;
&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This syntax is proposed and discussed in the Clojure-dev group at &lt;a rel=&quot;nofollow&quot; href=&quot;https://groups.google.com/forum/?fromgroups#!topic/clojure-dev/GQqus5Wycno&quot;&gt;https://groups.google.com/forum/?fromgroups#!topic/clojure-dev/GQqus5Wycno&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Open question: Should the queue literal's arguments eval?  The implications of this are illustrated below:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
;; non-eval case&lt;/p&gt;
&lt;h2&gt;queue [1 2 (+ 1 2)]&lt;/h2&gt;
&lt;p&gt;;=&amp;gt; #queue [1 2 (+ 1 2)]&lt;/p&gt;
&lt;p&gt;;; eval case&lt;/p&gt;
&lt;h2&gt;queue [1 2 (+ 1 2)]&lt;/h2&gt;
&lt;p&gt;;=&amp;gt; #queue [1 2 3]&lt;br&gt;
&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The answer to this open question will determine the implementation.&lt;/p&gt;
</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/3365/implement-reader-literal-support-persistentqueue-structure?show=3365#q3365</guid>
<pubDate>Tue, 09 Jun 2026 22:58:49 +0000</pubDate>
</item>
<item>
<title>Commented: Consider including a built-in wrapper around `java.net.http.HttpClient` in future versions of Clojure</title>
<link>https://ask.clojure.org/index.php/15129/consider-including-wrapper-around-httpclient-versions-clojure?show=15130#c15130</link>
<description>Here are a few more libraries that are light wrappers over the jdk HttpClient. Notably they expose a way to send a response body handler with the request, as HttpClient does.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/exoscale/telex&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/exoscale/telex&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/onionpancakes/hop&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/onionpancakes/hop&lt;/a&gt;</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15129/consider-including-wrapper-around-httpclient-versions-clojure?show=15130#c15130</guid>
<pubDate>Mon, 08 Jun 2026 15:35:28 +0000</pubDate>
</item>
<item>
<title>Answered: Object.clone() confusion</title>
<link>https://ask.clojure.org/index.php/15125/object-clone-confusion?show=15128#a15128</link>
<description>&lt;p&gt;clone() is a protected method - you should generally not call it on an arbitrary object.  In Java, you can't even make that call, you'll get &quot;clone() has protected access in java.lang.Object&quot;. It's a quirk of Clojure's impl that it even makes it possible via reflection. &lt;/p&gt;
&lt;p&gt;So, my suggestion is to not call clone() at all. There are many, many reasons clone() is problematic and considered one of the more questionable features of Java's early design.&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15125/object-clone-confusion?show=15128#a15128</guid>
<pubDate>Sat, 06 Jun 2026 00:06:59 +0000</pubDate>
</item>
<item>
<title>Commented: `eval` using functions with metadata</title>
<link>https://ask.clojure.org/index.php/15115/eval-using-functions-with-metadata?show=15122#c15122</link>
<description>#= is undocumented because it is not intended to be used outside the compiler.</description>
<category>Syntax and reader</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15115/eval-using-functions-with-metadata?show=15122#c15122</guid>
<pubDate>Thu, 04 Jun 2026 02:35:24 +0000</pubDate>
</item>
<item>
<title>Request: allow a user function to be specified as the target of clojure.main/report-error</title>
<link>https://ask.clojure.org/index.php/15120/request-allow-function-specified-target-clojure-report-error</link>
<description>&lt;p&gt;The three current targets (&lt;code&gt;file&lt;/code&gt;, &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;stderr&lt;/code&gt;) all serialize all of the error data to a string. During development, it would be convenient to be able to define a function that is called with the exception instance. This function might capture additional application state, or open a window in the user's editor, etc.&lt;/p&gt;
&lt;p&gt;Note that it is not possible to work around this by replacing &lt;code&gt;report-error&lt;/code&gt; itself because the entire clojure.main namespace is AOT-compiled, so &lt;code&gt;alter-var-root&lt;/code&gt; has no effect.&lt;/p&gt;
&lt;p&gt;See &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/clojure-emacs/cider/issues/3850&quot;&gt;https://github.com/clojure-emacs/cider/issues/3850&lt;/a&gt; for an example where this feature would be helpful.&lt;/p&gt;
&lt;p&gt;Related Slack thread: &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojurians.slack.com/archives/C03S1KBA2/p1779991120304049&quot;&gt;https://clojurians.slack.com/archives/C03S1KBA2/p1779991120304049&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15120/request-allow-function-specified-target-clojure-report-error</guid>
<pubDate>Tue, 02 Jun 2026 23:53:32 +0000</pubDate>
</item>
<item>
<title>Answered: :or destructuring doesn't update object</title>
<link>https://ask.clojure.org/index.php/13141/or-destructuring-doesnt-update-object?show=15118#a15118</link>
<description>&lt;p&gt;I logged an improvement request for this here, happy to collect more ideas here. &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/CLJ-2957&quot;&gt;https://clojure.atlassian.net/browse/CLJ-2957&lt;/a&gt;&lt;/p&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13141/or-destructuring-doesnt-update-object?show=15118#a15118</guid>
<pubDate>Mon, 01 Jun 2026 17:45:30 +0000</pubDate>
</item>
<item>
<title>Commented: Should reduce-kv support String?</title>
<link>https://ask.clojure.org/index.php/15109/should-reduce-kv-support-string?show=15114#c15114</link>
<description>i agree that it matching nth would be the most consistent.</description>
<category>Protocols</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15109/should-reduce-kv-support-string?show=15114#c15114</guid>
<pubDate>Mon, 01 Jun 2026 00:49:45 +0000</pubDate>
</item>
<item>
<title>Commented: `(:k m)` returns `nil` while `(identical? (first (keys m)) :k)` is `true` — two coexisting `Keyword` instances?</title>
<link>https://ask.clojure.org/index.php/15073/returns-while-identical-first-coexisting-keyword-instances?show=15107#c15107</link>
<description>Follow up discussion is happening on this thread on the Clojurians Slack: &lt;a href=&quot;https://clojurians.slack.com/archives/C03S1KBA2/p1779097281433139&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://clojurians.slack.com/archives/C03S1KBA2/p1779097281433139&lt;/a&gt;</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15073/returns-while-identical-first-coexisting-keyword-instances?show=15107#c15107</guid>
<pubDate>Wed, 27 May 2026 10:02:45 +0000</pubDate>
</item>
<item>
<title>Closed: Consider allowing passing two arguments to sets used as functions</title>
<link>https://ask.clojure.org/index.php/15104/consider-allowing-passing-two-arguments-sets-used-functions?show=15104#q15104</link>
<description>&lt;p&gt;Similar to how &lt;code&gt;get&lt;/code&gt; works with the 3rd &lt;code&gt;not-found&lt;/code&gt; argument.&lt;/p&gt;
&lt;p&gt;It already works in CLJS:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ClojureScript 1.12.116
cljs.user=&amp;gt; (#{:a} :b :c)
:c
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In Clojure, it errors out:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Clojure 1.12.0
user=&amp;gt; (#{:a} :b :c)
Execution error (ArityException) at user/eval1 (REPL:1).
Wrong number of args (2) passed to: clojure.lang.PersistentHashSet
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>Clojure</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15104/consider-allowing-passing-two-arguments-sets-used-functions?show=15104#q15104</guid>
<pubDate>Tue, 26 May 2026 13:56:17 +0000</pubDate>
</item>
<item>
<title>Commented: The behavior of `filter` on infinite sequences in Transducers</title>
<link>https://ask.clojure.org/index.php/15095/the-behavior-of-filter-on-infinite-sequences-in-transducers?show=15103#c15103</link>
<description>If you know you're dealing with infinite sequences, that's the use case for lazy operations -- just don't use transducers on them.</description>
<category>Transducers</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15095/the-behavior-of-filter-on-infinite-sequences-in-transducers?show=15103#c15103</guid>
<pubDate>Mon, 25 May 2026 12:20:42 +0000</pubDate>
</item>
<item>
<title>Answer selected: gitlibs/tags throws a NPE if the repository has no tags</title>
<link>https://ask.clojure.org/index.php/15094/gitlibs-tags-throws-a-npe-if-the-repository-has-no-tags?show=15101#a15101</link>
<description>&lt;p&gt;Thanks! Fixed in tools.gitlibs 2.6.217.&lt;/p&gt;
</description>
<category>Tools</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15094/gitlibs-tags-throws-a-npe-if-the-repository-has-no-tags?show=15101#a15101</guid>
<pubDate>Sun, 24 May 2026 22:06:48 +0000</pubDate>
</item>
<item>
<title>Answered: Can 'write-pom' in tools.build support providing additional dependencies in the pom.xml with scope 'provided'?</title>
<link>https://ask.clojure.org/index.php/12817/tools-support-providing-additional-dependencies-provided?show=15093#a15093</link>
<description>&lt;p&gt;&lt;code&gt;tools.build&lt;/code&gt; supports &lt;code&gt;:optional true&lt;/code&gt; in a dependency, which adds &lt;code&gt;&amp;lt;optional&amp;gt;true&amp;lt;/optional&amp;gt;&lt;/code&gt; to &lt;code&gt;pom.xml&lt;/code&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://cljdoc.org&quot;&gt;https://cljdoc.org&lt;/a&gt; fetches the dependency, so analysis works, but the dependency does not get pulled in as a transitive dep for &quot;normal&quot; project usage.&lt;/p&gt;
&lt;p&gt;See my &lt;code&gt;rephrase&lt;/code&gt; project for an example of this working:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/seancorfield/rephrase/blob/main/deps.edn#L4-L6&quot;&gt;https://github.com/seancorfield/rephrase/blob/main/deps.edn#L4-L6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; :aliases
 {:optional
  {:extra-deps {nrepl/nrepl {:mvn/version &quot;1.7.0&quot; :optional true}}}
  ...&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/seancorfield/rephrase/blob/main/build.clj#L34&quot;&gt;https://github.com/seancorfield/rephrase/blob/main/build.clj#L34&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; :basis     (b/create-basis {:aliases [:optional]})&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;(used for the &lt;code&gt;write-pom&lt;/code&gt; call)&lt;/p&gt;
&lt;p&gt;Doesn't show up when used via &lt;code&gt;deps.edn&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;clojure -Spath -Sforce -Sdeps '{:deps {org.corfield/rephrase {:mvn/version &quot;1.0.2&quot;}}}'
src:/home/sean/.m2/repository/org/clojure/clojure/1.12.5/clojure-1.12.5.jar:/home/sean/.m2/repository/org/corfield/rephrase/1.0.2/rephrase-1.0.2.jar:/home/sean/.m2/repository/org/clojure/core.specs.alpha/0.4.74/core.specs.alpha-0.4.74.jar:/home/sean/.m2/repository/org/clojure/spec.alpha/0.5.238/spec.alpha-0.5.238.jar&lt;/code&gt;&lt;/p&gt;
</description>
<category>tools.build</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/12817/tools-support-providing-additional-dependencies-provided?show=15093#a15093</guid>
<pubDate>Thu, 21 May 2026 21:36:50 +0000</pubDate>
</item>
<item>
<title>Answered: core.unify does not preserve want-occurs? in recursive unify-variable calls</title>
<link>https://ask.clojure.org/index.php/15082/core-unify-preserve-occurs-recursive-unify-variable-calls?show=15089#a15089</link>
<description>&lt;p&gt;Thanks for the report. Definitely not intentional.&lt;/p&gt;
&lt;p&gt;Logged at &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/UNIFY-12&quot;&gt;https://clojure.atlassian.net/browse/UNIFY-12&lt;/a&gt;&lt;/p&gt;
</description>
<category>core.unify</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15082/core-unify-preserve-occurs-recursive-unify-variable-calls?show=15089#a15089</guid>
<pubDate>Tue, 19 May 2026 20:32:36 +0000</pubDate>
</item>
<item>
<title>Answered: linux installer fails for non english locale</title>
<link>https://ask.clojure.org/index.php/15081/linux-installer-fails-for-non-english-locale?show=15088#a15088</link>
<description>&lt;p&gt;Logged as &lt;a rel=&quot;nofollow&quot; href=&quot;https://clojure.atlassian.net/browse/TDEPS-280&quot;&gt;https://clojure.atlassian.net/browse/TDEPS-280&lt;/a&gt;, definitely will fix!&lt;/p&gt;
</description>
<category>Tools</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15081/linux-installer-fails-for-non-english-locale?show=15088#a15088</guid>
<pubDate>Tue, 19 May 2026 19:59:16 +0000</pubDate>
</item>
<item>
<title>Answer selected: Reflection warning when long hint on an argument</title>
<link>https://ask.clojure.org/index.php/15067/reflection-warning-when-long-hint-on-an-argument?show=15068#a15068</link>
<description>&lt;p&gt;It's the same thing as in &lt;a rel=&quot;nofollow&quot; href=&quot;https://ask.clojure.org/index.php/13501/primitive-type-hints-arguments-turns-the-return-value-object&quot;&gt;https://ask.clojure.org/index.php/13501/primitive-type-hints-arguments-turns-the-return-value-object&lt;/a&gt;.&lt;/p&gt;
</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15067/reflection-warning-when-long-hint-on-an-argument?show=15068#a15068</guid>
<pubDate>Fri, 08 May 2026 10:11:04 +0000</pubDate>
</item>
<item>
<title>Comment edited: Do primitive type hints in fn arguments turns the return value as an Object?</title>
<link>https://ask.clojure.org/index.php/13501/primitive-type-hints-arguments-turns-the-return-value-object?show=15071#c15071</link>
<description>Indeed @alexmiller, it seems the same issue as &lt;a href=&quot;https://ask.clojure.org/index.php/15067/reflection-warning-when-long-hint-on-an-argument&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://ask.clojure.org/index.php/15067/reflection-warning-when-long-hint-on-an-argument&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Was there any reason why this didn't go forward? Is it more involved than a simple bugfix? Asking because I cannot see the ticket.</description>
<category>Java Interop</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/13501/primitive-type-hints-arguments-turns-the-return-value-object?show=15071#c15071</guid>
<pubDate>Sat, 02 May 2026 11:07:04 +0000</pubDate>
</item>
<item>
<title>Comment edited: Default implementation of AsElements to treat numbers as numbers, not strings</title>
<link>https://ask.clojure.org/index.php/15060/default-implementation-aselements-numbers-numbers-strings?show=15065#c15065</link>
<description>Oh yeah, that's a great point. I'll do more research but I believe after a cursory look that you're correct: all &amp;quot;content&amp;quot; is considered text (unless it's another tag).</description>
<category>data.xml</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15060/default-implementation-aselements-numbers-numbers-strings?show=15065#c15065</guid>
<pubDate>Wed, 29 Apr 2026 18:31:03 +0000</pubDate>
</item>
<item>
<title>Comment edited: Installing Clojure on IPv6-only machine</title>
<link>https://ask.clojure.org/index.php/15051/installing-clojure-on-ipv6-only-machine?show=15054#c15054</link>
<description>Thank you, Sean!&lt;br /&gt;
&lt;br /&gt;
I found some tooling options that enforces IPv6 better: &lt;br /&gt;
&lt;br /&gt;
export JAVA_TOOL_OPTIONS=&amp;quot;-Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
But still GitHub does not have IPv6-support,.&lt;br /&gt;
&lt;br /&gt;
It also seems like repo.clojars.org does not have correct IPv6-support, (clojars.org works!)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/clojars/clojars-web/issues/941&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/clojars/clojars-web/issues/941&lt;/a&gt;</description>
<category>Tools</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/15051/installing-clojure-on-ipv6-only-machine?show=15054#c15054</guid>
<pubDate>Sat, 25 Apr 2026 01:10:20 +0000</pubDate>
</item>
<item>
<title>Answered: Porting .NET 4.8 application using Clojure CLR to .NET 8</title>
<link>https://ask.clojure.org/index.php/14187/porting-net-4-8-application-using-clojure-clr-to-net-8?show=15048#a15048</link>
<description>&lt;p&gt;&lt;code&gt;clojure.core/load&lt;/code&gt; calls &lt;code&gt;RT.load&lt;/code&gt; as seen in the stack trace.&lt;br&gt;
The set of probe paths for &lt;code&gt;RT.load&lt;/code&gt; is&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the directory of the domain of the thread that is running (domains really being more relevant to .NET Framework at this point)&lt;/li&gt;
&lt;li&gt;the current directory&lt;/li&gt;
&lt;li&gt;the directory where Clojure.dll is located&lt;/li&gt;
&lt;li&gt;the directory of the entry assembly&lt;/li&gt;
&lt;li&gt;all directories listed as the value of the environment variable &lt;code&gt;CLOJURE_LOAD_PATH&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;this is equivalent to the classpath in Java-land.&lt;/li&gt;
&lt;li&gt;separator character is &lt;code&gt;System.IO.Path.PathSeparator&lt;/code&gt;  (&lt;code&gt;;&lt;/code&gt; on Windows)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clearly this is not sufficiently documented.  Will work on that.&lt;/p&gt;
</description>
<category>ClojureCLR</category>
<guid isPermaLink="true">https://ask.clojure.org/index.php/14187/porting-net-4-8-application-using-clojure-clr-to-net-8?show=15048#a15048</guid>
<pubDate>Thu, 23 Apr 2026 04:55:40 +0000</pubDate>
</item>
</channel>
</rss>