<!--
RSS generated by JIRA (4.4#649-r158309) at Fri May 24 00:43:44 CDT 2013

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
For example:
http://dev.clojure.org/jira/sr/jira.issueviews:searchrequest-xml/10360/SearchRequest-10360.xml?tempMax=1000&field=key&field=summary
-->
<!-- If you wish to do custom client-side styling of RSS, uncomment this:
<?xml-stylesheet href="http://dev.clojure.org/jira/styles/jiraxml2html.xsl" type="text/xsl"?>
-->
<rss version="0.92">
    <channel>
        <title>AAB Open, neither CLJ nor CLJS (Clojure JIRA)</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?requestId=10360</link>
        <description></description>
                <language>en-us</language>
                        <issue start="0" end="150" total="150"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<item>
            <title>[DXML-4] Namespaces support</title>
                <link>http://dev.clojure.org/jira/browse/DXML-4</link>
                <project id="10077" key="DXML">data.xml</project>
                        <description>&lt;p&gt;Add support for both parsing and emitting namespace qualified tags and namespaces URI declarations.&lt;br/&gt;
It basically follows the underlying Java XML API in giving xmlns:foo attributes &quot;special&quot; treatment.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15299">DXML-4</key>
            <summary>Namespaces support</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ryansenior">Ryan Senior</assignee>
                                <reporter username="skuro">Carlo Sciolla</reporter>
                        <labels>
                    </labels>
                <created>Tue, 27 Mar 2012 15:45:05 -0500</created>
                <updated>Sun, 21 Apr 2013 19:04:27 -0500</updated>
                                                                            <due></due>
                    <votes>3</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="28563" author="ryansenior" created="Tue, 22 May 2012 10:26:38 -0500"  >&lt;p&gt;I don&apos;t see a contributor agreement for you Carlo.  Have you signed one? &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="28881" author="gtrak" created="Tue, 19 Jun 2012 18:09:04 -0500"  >&lt;p&gt;ping, is the patch still waiting for a signed CA?&lt;/p&gt;</comment>
                    <comment id="28906" author="ryansenior" created="Tue, 26 Jun 2012 12:14:27 -0500"  >&lt;p&gt;Yes&lt;/p&gt;</comment>
                    <comment id="30128" author="ronslow" created="Sat, 1 Dec 2012 05:07:39 -0600"  >&lt;p&gt;Is this patch due reasonable soon?&lt;/p&gt;</comment>
                    <comment id="30980" author="jafingerhut" created="Sun, 21 Apr 2013 19:04:27 -0500"  >&lt;p&gt;Link to a design page with some ideas for XML namespace support in Clojure: &lt;a href=&quot;http://dev.clojure.org/display/DXML/Fuller+XML+support&quot;&gt;http://dev.clojure.org/display/DXML/Fuller+XML+support&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11017" name="add-namespace-support.patch" size="8171" author="skuro" created="Tue, 27 Mar 2012 15:45:05 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-63] IllegalArgumentException when AOT compiling namespace using clojure.core.match since alpha10</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-63</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Getting this when AOT compiling a trivial project (attached) using alpha10: (works fine with alpha9)&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Caused by: java.lang.IllegalArgumentException: No method in multimethod &apos;to-source&apos; &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; dispatch value: class clojure.core.match.WildcardPattern
	at clojure.lang.MultiFn.getFn(MultiFn.java:121)
	at clojure.lang.MultiFn.invoke(MultiFn.java:167)
	at clojure.core.match$dag_clause_to_clj.invoke(match.clj:424)
	at clojure.lang.AFn.applyToHelper(AFn.java:167)
	at clojure.lang.AFn.applyTo(AFn.java:151)
	at clojure.core$apply.invoke(core.clj:602)
	at clojure.lang.AFn.applyToHelper(AFn.java:167)
	at clojure.lang.RestFn.applyTo(RestFn.java:132)
	at clojure.core$apply.invoke(core.clj:604)
	at clojure.core$partial$fn__3796.doInvoke(core.clj:2343)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$map$fn__3811.invoke(core.clj:2430)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$apply.invoke(core.clj:600)
	at clojure.core$mapcat.doInvoke(core.clj:2459)
	at clojure.lang.RestFn.invoke(RestFn.java:423)
	at clojure.core.match.SwitchNode.n_to_clj(match.clj:446)
	at clojure.core.match.BindNode.n_to_clj(match.clj:411)
	at clojure.core.match$executable_form.invoke(match.clj:1713)
	at clojure.core.match$clj_form.invoke(match.clj:1721)
	at clojure.core.match$match.doInvoke(match.clj:1750)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment>core.match 0.2.0-alpha10 and 0.2.0-alpha11-SNAPSHOT (git 7ad66cc)&lt;br/&gt;
clojure 1.3.0 and 1.4.0&lt;br/&gt;
</environment>
            <key id="15616">MATCH-63</key>
            <summary>IllegalArgumentException when AOT compiling namespace using clojure.core.match since alpha10</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="pmoriarty">Paudi Moriarty</reporter>
                        <labels>
                    </labels>
                <created>Wed, 8 Aug 2012 08:41:56 -0500</created>
                <updated>Tue, 26 Feb 2013 13:55:26 -0600</updated>
                                                                            <due></due>
                    <votes>3</votes>
                        <watches>4</watches>
                        <comments>
                    <comment id="29987" author="frederikdb" created="Tue, 20 Nov 2012 16:18:04 -0600"  >&lt;p&gt;I can confirm the same issue on alpha11.&lt;/p&gt;</comment>
                    <comment id="30024" author="dnolen" created="Fri, 23 Nov 2012 16:52:26 -0600"  >&lt;p&gt;I believe I may have found the cause and have fixed master - if someone can confirm I&apos;ll happily cut another release.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://github.com/clojure/core.match/commit/cbcc6e5fa070a7025e72f5eab4e83eaec100332b&quot;&gt;http://github.com/clojure/core.match/commit/cbcc6e5fa070a7025e72f5eab4e83eaec100332b&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30438" author="pmoriarty" created="Tue, 15 Jan 2013 09:42:58 -0600"  >&lt;p&gt;Thanks David, &lt;/p&gt;

&lt;p&gt;That change has &lt;b&gt;not&lt;/b&gt; fixed the issue for me.&lt;/p&gt;</comment>
                    <comment id="30439" author="pmoriarty" created="Tue, 15 Jan 2013 09:56:23 -0600"  >&lt;p&gt;So the pattern parameter being passed to dag-clause-to-clj:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn dag-clause-to-clj [occurrence pattern action]
  (let [test (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (instance? clojure.core.match.IPatternCompile pattern)
               (to-source* pattern occurrence)
               (to-source pattern occurrence))]
...&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;is a WildcardPattern which doesn&apos;t implement IPatternCompile and doesn&apos;t have a to-source method. So it seems it shouldn&apos;t be passed at all. Indeed, in normal usage it isn&apos;t.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;;; ## Wildcard Pattern
;; 
;; A wildcard pattern accepts any value.
;;
;; In practice, the DAG compilation eliminates any wildcard patterns.

(defprotocol IWildcardPattern
  (sym [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;]))

(deftype WildcardPattern [sym _meta]
  IWildcardPattern
  (sym [_] sym)
  clojure.lang.IObj
  (meta [_] _meta)
  (withMeta [_ &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;-meta]
    (WildcardPattern. sym &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;-meta))
  &lt;span class=&quot;code-object&quot;&gt;Object&lt;/span&gt;
  (toString [_]
    (str sym)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="30440" author="dnolen" created="Tue, 15 Jan 2013 11:17:41 -0600"  >&lt;p&gt;Can you include an example pattern which works under normal circumstances but fails under AOT? This must meant that WildcardPatterns are making it through under AOT and getting to the multimethod case but not under incremental compilation at the REPL.&lt;/p&gt;</comment>
                    <comment id="30441" author="pmoriarty" created="Wed, 16 Jan 2013 09:34:59 -0600"  >&lt;p&gt;This seems to do it:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match {}
  {:a :x :b b} :dummy
  :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :dummy)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                    <comment id="30663" author="tolsen" created="Tue, 26 Feb 2013 13:55:26 -0600"  >&lt;p&gt;I&apos;ve seen this problem as well.  If I try to compile a second time, however, without running &lt;tt&gt;lein clean&lt;/tt&gt;, the compilation succeeds.  Maybe it&apos;s a bootstrapping problem?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11414" name="matchtest.zip" size="1043" author="pmoriarty" created="Wed, 8 Aug 2012 08:42:28 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CMEMOIZE-4] Dyadic memo-clear! evicts based on memoized fn args</title>
                <link>http://dev.clojure.org/jira/browse/CMEMOIZE-4</link>
                <project id="10172" key="CMEMOIZE">core.memoize</project>
                        <description>&lt;p&gt;A straightforward addition for the existing interface to the underlying cache. Useful for cases where the memoization cache need only be evicted for some inputs.&lt;/p&gt;

&lt;p&gt;Please let me know if this is not the desired channel or format for submissions!&lt;/p&gt;</description>
                <environment></environment>
            <key id="15559">CMEMOIZE-4</key>
            <summary>Dyadic memo-clear! evicts based on memoized fn args</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="strongh">Homer Strong</reporter>
                        <labels>
                    </labels>
                <created>Fri, 29 Jun 2012 19:31:45 -0500</created>
                <updated>Fri, 29 Jun 2012 19:31:45 -0500</updated>
                                                                            <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11354" name="dyadic-memo-clear.patch" size="1522" author="strongh" created="Fri, 29 Jun 2012 19:31:45 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[JDBC-53] create-table &amp; drop-table doesn&apos;t honor naming strategy</title>
                <link>http://dev.clojure.org/jira/browse/JDBC-53</link>
                <project id="10021" key="JDBC">java.jdbc</project>
                        <description>&lt;p&gt;create-table &amp;amp; drop-table doesn&apos;t take the current naming strategy into account.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16156">JDBC-53</key>
            <summary>create-table &amp; drop-table doesn&apos;t honor naming strategy</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="seancorfield">Sean Corfield</assignee>
                                <reporter username="r0man">Roman Scherer</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Apr 2013 08:47:12 -0500</created>
                <updated>Sun, 12 May 2013 20:56:38 -0500</updated>
                                                                            <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30987" author="seancorfield" created="Wed, 24 Apr 2013 11:08:25 -0500"  >&lt;p&gt;Just to note: the naming strategy stuff, based on dynamically bound globals, is all deprecated in 0.3.0. Alternatives to create-table and drop-table, which respect the new entities function approach, will be provided in an upcoming alpha build of 0.3.0.&lt;/p&gt;</comment>
                    <comment id="31084" author="davidj" created="Sat, 11 May 2013 20:51:07 -0500"  >&lt;p&gt;Any update on this? I noticed the deprecations while reading the code. Could you say a few words or add a few docs on the 0.3 way of doing naming strategies?&lt;/p&gt;</comment>
                    <comment id="31085" author="seancorfield" created="Sat, 11 May 2013 23:20:08 -0500"  >&lt;p&gt;The replacement is entities and identifiers (as keyword arguments in java.jdbc functions and as macros in java.jdbc.sql). You can see some examples here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://clojure.github.io/java.jdbc/doc/clojure/java/jdbc/NameMapping.html&quot;&gt;http://clojure.github.io/java.jdbc/doc/clojure/java/jdbc/NameMapping.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Replacements for create-table / drop-table will be added before beta1. I&apos;m not sure right now how many more alphas we&apos;ll have. There&apos;s a lot of churn in the code right now and I want it to be feature complete and fairly settled before the first beta.&lt;/p&gt;</comment>
                    <comment id="31086" author="moquist" created="Sun, 12 May 2013 20:56:38 -0500"  >&lt;p&gt;Thanks for the update; looking forward to it!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TBENCH-12] Alioth k-nucleotide</title>
                <link>http://dev.clojure.org/jira/browse/TBENCH-12</link>
                <project id="10014" key="TBENCH">test.benchmark</project>
                        <description></description>
                <environment></environment>
            <key id="15137">TBENCH-12</key>
            <summary>Alioth k-nucleotide</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 21 Jan 2012 13:05:24 -0600</created>
                <updated>Thu, 23 Feb 2012 22:46:37 -0600</updated>
                                                                            <due></due>
                    <votes>1</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27787" author="mikera" created="Tue, 21 Feb 2012 05:00:13 -0600"  >&lt;p&gt;Have added my latest version of the k-nucleotide benchmark in the following repository:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mikera/test.benchmark/&quot;&gt;https://github.com/mikera/test.benchmark/&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="27793" author="dnolen" created="Tue, 21 Feb 2012 08:00:32 -0600"  >&lt;p&gt;Please create a patch of your changes and add it to the ticket, thanks!&lt;/p&gt;</comment>
                    <comment id="27825" author="pmbauer" created="Thu, 23 Feb 2012 15:43:59 -0600"  >&lt;p&gt;If you add a patch, I can take a look at this tonight.&lt;/p&gt;</comment>
                    <comment id="27829" author="pmbauer" created="Thu, 23 Feb 2012 22:45:56 -0600"  >&lt;p&gt;Mike,&lt;br/&gt;
I did pull down your repo and ran some tests.&lt;br/&gt;
This version of k-nucleotide does run faster than the currently submitted version in alioth.&lt;br/&gt;
However, we&apos;ve got a ways to go to catch the faster Java implementations.&lt;/p&gt;

&lt;p&gt;I&apos;ve added a few comments in your repo.&lt;br/&gt;
Of note, the (set! &lt;b&gt;unchecked-math&lt;/b&gt; true) directive at the top of files allows us to use inc, dec, etc directly without explicitly specifying unchecked-inc, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://shootout.alioth.debian.org/u64q/program.php?test=knucleotide&amp;amp;lang=java&amp;amp;id=9&quot;&gt;http://shootout.alioth.debian.org/u64q/program.php?test=knucleotide&amp;amp;lang=java&amp;amp;id=9&lt;/a&gt; is the fastest java version, but is a bit gnarly.&lt;br/&gt;
&lt;a href=&quot;http://shootout.alioth.debian.org/u64q/program.php?test=knucleotide&amp;amp;lang=java&amp;amp;id=2&quot;&gt;http://shootout.alioth.debian.org/u64q/program.php?test=knucleotide&amp;amp;lang=java&amp;amp;id=2&lt;/a&gt; is a little slower, but in the same order of magnitude for performance, and significantly more straightforward.&lt;/p&gt;

&lt;p&gt;You might check those out for some inspiration to boost the performance of clojure&apos;s knucleotide.&lt;br/&gt;
Good luck and thanks for the help!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TCLI-3] Change contract to provide access to banner on parse error</title>
                <link>http://dev.clojure.org/jira/browse/TCLI-3</link>
                <project id="10082" key="TCLI">tools.cli</project>
                        <description>&lt;p&gt;If a user provides an invalid option, most applications would want to display the banner.&lt;/p&gt;

&lt;p&gt;tools.cli throws an Exception with minimal information, and (banner-for) is marked private.&lt;/p&gt;

&lt;p&gt;The exception could be replaced with one that provides access to the banner, but I think it would be better (easier to use, more idiomatic?) to change the contract so that the banner is always returned. Given the exception string is also useful, perhaps change cli to return a map with keys &lt;span class=&quot;error&quot;&gt;&amp;#91;:options :extra-args :banner :parse-failure&amp;#93;&lt;/span&gt;?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15996">TCLI-3</key>
            <summary>Change contract to provide access to banner on parse error</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="gar3thjon3s">Gareth Jones</assignee>
                                <reporter username="phiipa">Philip Aston</reporter>
                        <labels>
                    </labels>
                <created>Sat, 9 Feb 2013 09:00:19 -0600</created>
                <updated>Fri, 8 Mar 2013 04:19:03 -0600</updated>
                                                                            <due></due>
                    <votes>1</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30714" author="gv" created="Fri, 8 Mar 2013 04:19:03 -0600"  >&lt;p&gt;I agree with the reporter. Throwing an exception for invalid arguments (&quot;&lt;span class=&quot;error&quot;&gt;&amp;#91;...&amp;#93;&lt;/span&gt; is not a valid argument&quot;) is not appropriate since you usually want to display that error message along with the banner.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[ALGOG-1] Mention algo.generic.functor in README</title>
                <link>http://dev.clojure.org/jira/browse/ALGOG-1</link>
                <project id="10071" key="ALGOG">algo.generic</project>
                        <description>&lt;p&gt;All algo.generic submodules except for functor are mentioned in the README.&lt;/p&gt;

&lt;p&gt;Attached is a patch that rectifies this.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15849">ALGOG-1</key>
            <summary>Mention algo.generic.functor in README</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="qerub">Christoffer Sawicki</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Nov 2012 15:22:42 -0600</created>
                <updated>Fri, 23 Nov 2012 15:22:42 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="11706" name="Mention-algo.generic.functor-in-README.patch" size="893" author="qerub" created="Fri, 23 Nov 2012 15:22:42 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[ALGOG-2] dispatch for fmap multimethod shouldn&apos;t be on type of second argument</title>
                <link>http://dev.clojure.org/jira/browse/ALGOG-2</link>
                <project id="10071" key="ALGOG">algo.generic</project>
                        <description>&lt;p&gt;AFAICT having fmap dispatch on the type of the second argument makes it practically impossible to define fmap for arbitrary functions, since the type is different for each function:&lt;/p&gt;

&lt;p&gt;user&amp;gt; (type type)&lt;br/&gt;
clojure.core$type&lt;br/&gt;
user&amp;gt; (type fn?)&lt;br/&gt;
clojure.core$fn_QMARK_&lt;br/&gt;
user&amp;gt; (type not=)&lt;br/&gt;
clojure.core$not_EQ_&lt;br/&gt;
user&amp;gt; &lt;/p&gt;

&lt;p&gt;However, there&apos;s a perfectly reasonable definition of fmap for functions (fmap = comp).&lt;/p&gt;

&lt;p&gt;To my mind the simplest/best thing to do is just have a Functor protocol and have fmap call a function in it, with the order of arguments reversed so that dispatch will happen correctly.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16198">ALGOG-2</key>
            <summary>dispatch for fmap multimethod shouldn&apos;t be on type of second argument</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="wolfson">ben wolfson</reporter>
                        <labels>
                    </labels>
                <created>Wed, 22 May 2013 18:34:29 -0500</created>
                <updated>Wed, 22 May 2013 18:34:29 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[ALGOM-1] Add conditionals stratements to domonad forms</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-1</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;I implemented a patch that would allow us to do conditionals on domonad macros&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;    (domonad monad-m&lt;br/&gt;
      [a (action 1)&lt;br/&gt;
       :if (= a 3)&lt;br/&gt;
       :then [&lt;br/&gt;
         result (action c)&lt;br/&gt;
       ]&lt;br/&gt;
       :else [&lt;br/&gt;
         result (action d)&lt;br/&gt;
       ]]&lt;br/&gt;
      result)&lt;/p&gt;

&lt;p&gt;Conditional blocks can be nested. &lt;/p&gt;

&lt;p&gt;One gotcha one has to be aware of is: you may use bindings from a conditional branch in the m-result sexp as long as that branch gets called, given that one doesn&apos;t know for sure which branch is going to be called, you should set the same bindings on both branches.&lt;/p&gt;

&lt;p&gt;The patch code is on: github.com/roman/algo.monads &lt;/p&gt;

&lt;p&gt;I didn&apos;t do a pull request given that you need to this first.&lt;/p&gt;

&lt;p&gt;NOTE: I&apos;ve added this feature in some other projects I&apos;ve been working on (parser combinators) and is working perfectly so far, there is tests in the patch but I wanted to give you that safe net as well. &lt;/p&gt;</description>
                <environment>The extension was developed in Mac OS X Lion</environment>
            <key id="15100">ALGOM-1</key>
            <summary>Add conditionals stratements to domonad forms</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="roman">Roman Gonzalez</reporter>
                        <labels>
                    </labels>
                <created>Fri, 6 Jan 2012 16:28:39 -0600</created>
                <updated>Tue, 10 Jan 2012 00:28:35 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27521" author="roman" created="Tue, 10 Jan 2012 00:28:35 -0600"  >&lt;p&gt;Adding support for monadic conditionals on the domonad macro&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10763" name="monadic-if-else.diff" size="42175" author="roman" created="Tue, 10 Jan 2012 00:28:35 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[ALGOM-2] Adding support for both :if-:then-:else and :cond statements on domacro implementations</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-2</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;This patch contains the same features as &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://dev.clojure.org/jira/browse/ALGOM-1&quot;&gt;http://dev.clojure.org/jira/browse/ALGOM-1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;plus a new one, the ability to add :cond statements using the domonad macro.&lt;/p&gt;

&lt;p&gt;More info can be found on the commit history of the given patch.&lt;/p&gt;</description>
                <environment>Mac OS X Lion</environment>
            <key id="15141">ALGOM-2</key>
            <summary>Adding support for both :if-:then-:else and :cond statements on domacro implementations</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="roman">Roman Gonzalez</reporter>
                        <labels>
                    </labels>
                <created>Sat, 21 Jan 2012 23:40:25 -0600</created>
                <updated>Tue, 24 Jan 2012 11:15:37 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27609" author="roman" created="Tue, 24 Jan 2012 11:15:37 -0600"  >&lt;p&gt;This is a new version of the patch that handles the conflicts with whitespaces vs tabs.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10785" name="monadic-cond.diff" size="47572" author="roman" created="Sat, 21 Jan 2012 23:40:25 -0600" />
                    <attachment id="10787" name="monadic-cond.patch" size="27812" author="roman" created="Tue, 24 Jan 2012 11:15:37 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[ALGOM-3] Bug in writer-monad-protocol for lists</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-3</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;The writer-monad-protocol for lists uses concat in writer-m-combine, the result of which has type LazySeq. However, LazySeq does not have an implementation in writer-monad-protocol (the first example, using vectors, shows expected output):&lt;/p&gt;

&lt;p&gt;{{&lt;br/&gt;
user=&amp;gt; (use &apos;clojure.algo.monads)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (domonad (writer-m []) [_ (domonad &lt;span class=&quot;error&quot;&gt;&amp;#91;_ (write &amp;quot;foo&amp;quot;)&amp;#93;&lt;/span&gt; nil) _ (write &quot;bar&quot;)] 1)&lt;br/&gt;
[1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;quot;foo&amp;quot; &amp;quot;bar&amp;quot;&amp;#93;&lt;/span&gt;]&lt;br/&gt;
user=&amp;gt; (domonad (writer-m ()) [_ (domonad &lt;span class=&quot;error&quot;&gt;&amp;#91;_ (write &amp;quot;foo&amp;quot;)&amp;#93;&lt;/span&gt; nil) _ (write &quot;bar&quot;)] 1)&lt;br/&gt;
IllegalArgumentException No implementation of method: :writer-m-combine of protocol: #&apos;clojure.algo.monads/writer-monad-&lt;br/&gt;
protocol found for class: clojure.lang.LazySeq  clojure.core/-cache-protocol-fn (core_deftype.clj:527)&lt;br/&gt;
}}&lt;/p&gt;

&lt;p&gt;I suggest changing the protocol extension to ISeq as in the attached diff. With that change:&lt;/p&gt;

&lt;p&gt;{{&lt;br/&gt;
user=&amp;gt; (use &apos;clojure.algo.monads)&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (domonad (writer-m []) [_ (domonad &lt;span class=&quot;error&quot;&gt;&amp;#91;_ (write &amp;quot;foo&amp;quot;)&amp;#93;&lt;/span&gt; nil) _ (write &quot;bar&quot;)] 1)&lt;br/&gt;
[1 &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;quot;foo&amp;quot; &amp;quot;bar&amp;quot;&amp;#93;&lt;/span&gt;]&lt;br/&gt;
user=&amp;gt; (domonad (writer-m ()) [_ (domonad &lt;span class=&quot;error&quot;&gt;&amp;#91;_ (write &amp;quot;foo&amp;quot;)&amp;#93;&lt;/span&gt; nil) _ (write &quot;bar&quot;)] 1)&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;1 (&amp;quot;foo&amp;quot; &amp;quot;bar&amp;quot;)&amp;#93;&lt;/span&gt;&lt;br/&gt;
}}&lt;/p&gt;</description>
                <environment>Clojure 1.4, Java 1.7, Windows 7</environment>
            <key id="15340">ALGOM-3</key>
            <summary>Bug in writer-monad-protocol for lists</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="glchapman">Greg Chapman</reporter>
                        <labels>
                    </labels>
                <created>Wed, 18 Apr 2012 13:20:11 -0500</created>
                <updated>Wed, 18 Apr 2012 13:20:11 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11064" name="monads.clj.diff" size="429" author="glchapman" created="Wed, 18 Apr 2012 13:20:11 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[ALGOM-4] algo.monad state-m fetch-val bug and efficiency issue</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-4</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;;; the bug&lt;/p&gt;

&lt;p&gt;(defn fetch-val&lt;br/&gt;
  &quot;Return a state-monad function that assumes the state to be a map and&lt;br/&gt;
   returns the value corresponding to the given key. The state is not modified.&quot;&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;key&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (domonad state-m&lt;br/&gt;
    &lt;span class=&quot;error&quot;&gt;&amp;#91;s (fetch-state)&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (key s))) ;; does not work for integer or string keys&lt;/p&gt;

&lt;p&gt;;; I propose replacing it with (get s key)&lt;/p&gt;

&lt;p&gt;;; the efficiency issue :&lt;br/&gt;
;;&lt;br/&gt;
;; domonad with monad parameter binds all the monad functions, &lt;br/&gt;
;; looking these up in the state-m map on each call&lt;br/&gt;
;;&lt;br/&gt;
;; solution :&lt;/p&gt;

&lt;p&gt;(defn fetch-val&lt;br/&gt;
  &quot;Return a state-monad function that assumes the state to be a map and&lt;br/&gt;
   returns the value corresponding to the given key. The state is not modified.&quot;&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;key&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;s&amp;#93;&lt;/span&gt;&lt;br/&gt;
    &lt;span class=&quot;error&quot;&gt;&amp;#91;(get s key) s&amp;#93;&lt;/span&gt;))&lt;/p&gt;


&lt;p&gt;;; - we avoid the monad map lookups&lt;br/&gt;
;; - coding style brought up to par with the rest of state-m functions&lt;/p&gt;</description>
                <environment>irrelevant</environment>
            <key id="15686">ALGOM-4</key>
            <summary>algo.monad state-m fetch-val bug and efficiency issue</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="cark">Sacha De Vos</reporter>
                        <labels>
                        <label>bug</label>
                        <label>performance</label>
                    </labels>
                <created>Sat, 8 Sep 2012 20:47:32 -0500</created>
                <updated>Sat, 8 Sep 2012 20:47:32 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[ALGOM-5] continuation monad can easily overflow stack</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-5</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;The continuation monad uses tail calls, and because they aren&apos;t optimized out it&apos;s vulnerable to stack overflows for large computations:&lt;/p&gt;

&lt;p&gt;;; there is a function clojure.algo.monads/m-reduce, but it has a&lt;br/&gt;
;; wierdly unuseful type.&lt;br/&gt;
(defmonadfn fold-m&lt;br/&gt;
  &lt;span class=&quot;error&quot;&gt;&amp;#91;f a xs&amp;#93;&lt;/span&gt; (reduce (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;macc x&amp;#93;&lt;/span&gt; (m-bind macc #(f % x))) (m-result a) xs))&lt;/p&gt;

&lt;p&gt;(defn add &lt;span class=&quot;error&quot;&gt;&amp;#91;s&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (run-cont&lt;br/&gt;
   (with-monad cont-m&lt;br/&gt;
     (call-cc&lt;br/&gt;
      (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;k&amp;#93;&lt;/span&gt;&lt;br/&gt;
        (fold-m (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;a n&amp;#93;&lt;/span&gt;&lt;br/&gt;
                  (if (== n 8888) (k 1)&lt;br/&gt;
                      (m-result (+ a n))))&lt;br/&gt;
                0 s))))))&lt;/p&gt;

&lt;p&gt;(add (range 1 10000)) ;; stack overflow&lt;/p&gt;


&lt;p&gt;Can be worked around with a trampoline:&lt;/p&gt;


&lt;p&gt;(defmonad cont-tramp-m&lt;br/&gt;
  [m-result m-result-cont&lt;br/&gt;
   m-bind m-bind-cont])&lt;/p&gt;

&lt;p&gt;(defn call-cc-tramp &lt;span class=&quot;error&quot;&gt;&amp;#91;f&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;c&amp;#93;&lt;/span&gt; [(f (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;v&amp;#93;&lt;/span&gt; (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;c v ::cont&amp;#93;&lt;/span&gt;))) c ::cont]))&lt;/p&gt;

&lt;p&gt;(defn run-cont-tramp &lt;span class=&quot;error&quot;&gt;&amp;#91;cont&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (loop &lt;span class=&quot;error&quot;&gt;&amp;#91;cv (cont identity)&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (if (and (vector? cv)&lt;br/&gt;
             (= ::cont (nth cv 2)))&lt;br/&gt;
      (recur ((first cv) (second cv)))&lt;br/&gt;
      cv)))&lt;/p&gt;

&lt;p&gt;(defn add2 &lt;span class=&quot;error&quot;&gt;&amp;#91;s&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (run-cont-tramp&lt;br/&gt;
   (with-monad cont-tramp-m&lt;br/&gt;
     (call-cc-tramp&lt;br/&gt;
      (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;k&amp;#93;&lt;/span&gt;&lt;br/&gt;
        (fold-m (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;a n&amp;#93;&lt;/span&gt;&lt;br/&gt;
                  (if (= n 8888)&lt;br/&gt;
                    (k 1)&lt;br/&gt;
                    (m-result (+ a n))))&lt;br/&gt;
                0 s))))))&lt;/p&gt;

&lt;p&gt;(add2 (range 1 1000000)) ;; -&amp;gt; 1&lt;/p&gt;</description>
                <environment></environment>
            <key id="15688">ALGOM-5</key>
            <summary>continuation monad can easily overflow stack</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="wolfson">ben wolfson</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 Sep 2012 11:51:56 -0500</created>
                <updated>Mon, 10 Sep 2012 12:01:47 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29418" author="wolfson" created="Mon, 10 Sep 2012 12:01:47 -0500"  >&lt;p&gt;I neglected to include m-result-cont and m-bind-cont for the cont-tramp-m call!&lt;/p&gt;

&lt;p&gt;(defn m-result-cont &lt;span class=&quot;error&quot;&gt;&amp;#91;v&amp;#93;&lt;/span&gt; (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;c&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;c v ::cont&amp;#93;&lt;/span&gt;))&lt;/p&gt;

&lt;p&gt;(defn m-bind-cont &lt;span class=&quot;error&quot;&gt;&amp;#91;mv f&amp;#93;&lt;/span&gt; (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;c&amp;#93;&lt;/span&gt; [mv (fn &lt;span class=&quot;error&quot;&gt;&amp;#91;v&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;(f v) c ::cont &amp;#93;&lt;/span&gt;) ::cont]))&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[ALGOM-6] algo.monads README has no artifacts information</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-6</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;algo.monads README has no artifacts information and does not conform to the Contrib README standards in any way.  Because clojure-dev is a closed group, I am filing it here.&lt;/p&gt;

&lt;p&gt;(originally filed by Michael Klishin in project CLJ, but seems to belong better here)&lt;/p&gt;</description>
                <environment></environment>
            <key id="15697">ALGOM-6</key>
            <summary>algo.monads README has no artifacts information</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Sep 2012 15:37:12 -0500</created>
                <updated>Fri, 14 Sep 2012 15:37:12 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[ALGOM-7] maybe-m breaks the monad laws.</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-7</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;One of the monad laws is that (m-bind (m-result v) f) should be the same as (f v). However, this is not the case in maybe-m:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (with-monad maybe-m (m-bind (m-result nil) nil?))&lt;br/&gt;
nil&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (nil? nil)&lt;br/&gt;
true&lt;/p&gt;

&lt;p&gt;The crux of the problem is that in algo.monad&apos;s maybe-m, there is no way to wrap a nil in a Just-like container.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15700">ALGOM-7</key>
            <summary>maybe-m breaks the monad laws.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="sgeo">Seth J. Gold</reporter>
                        <labels>
                    </labels>
                <created>Sat, 15 Sep 2012 15:00:36 -0500</created>
                <updated>Sat, 15 Sep 2012 15:27:03 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="29453" author="sgeo" created="Sat, 15 Sep 2012 15:27:03 -0500"  >&lt;p&gt;Just realized that that demonstration doesn&apos;t actually work, because the function passed to m-bind is supposed to return a monadic value. Here&apos;s a better one:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (with-monad maybe-m (m-bind (m-result nil) (comp m-result nil?)))&lt;br/&gt;
nil&lt;br/&gt;
user=&amp;gt; (with-monad maybe-m ((comp m-result nil?) nil))&lt;br/&gt;
true&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[ALGOM-8] Cosmetic change in maybe-m</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-8</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;Diff:&lt;br/&gt;
;- (if (nil? mv) nil (f mv)))&lt;br/&gt;
;+ (when-not (nil? mv) (f mv)))&lt;/p&gt;</description>
                <environment></environment>
            <key id="15747">ALGOM-8</key>
            <summary>Cosmetic change in maybe-m</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="edtsech">Edward Tsech</reporter>
                        <labels>
                    </labels>
                <created>Fri, 12 Oct 2012 08:07:03 -0500</created>
                <updated>Fri, 12 Oct 2012 08:07:35 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11553" name="maybe-m-cosmetic.patch" size="832" author="edtsech" created="Fri, 12 Oct 2012 08:07:03 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[ALGOM-9] Replace calls to deprecated functions</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-9</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;There are several calls to replicate, which was deprecated in Clojure 1.3.  Recommended replacement is repeat, which was added in 1.0.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15790">ALGOM-9</key>
            <summary>Replace calls to deprecated functions</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 28 Oct 2012 17:21:35 -0500</created>
                <updated>Sun, 28 Oct 2012 17:23:27 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29839" author="jafingerhut" created="Sun, 28 Oct 2012 17:23:27 -0500"  >&lt;p&gt;algom-9-replace-calls-to-deprecated-fns-v1.txt dated Oct 28 2012 replaces calls to replicate with repeat.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11626" name="algom-9-replace-calls-to-deprecated-fns-v1.txt" size="2376" author="jafingerhut" created="Sun, 28 Oct 2012 17:23:27 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CCACHE-11] Add eviction implementation to LIRSCache</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-11</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;The &lt;tt&gt;evict&lt;/tt&gt; method in the ProtocolCache needs implementation for &lt;tt&gt;LIRSCache&lt;/tt&gt;.  I will start initially with a single key eviction method to start.  The &lt;tt&gt;evict&lt;/tt&gt; method would form the basis for the associative &lt;tt&gt;dissoc&lt;/tt&gt; which in turn forms the basis for proper limited seeding.  LIRS poses an additional complication due to its dual limit lists.  Currently only the &lt;tt&gt;BasicCache&lt;/tt&gt; impl has &lt;tt&gt;evict&lt;/tt&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15056">CCACHE-11</key>
            <summary>Add eviction implementation to LIRSCache</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                        <label>associative</label>
                        <label>cache</label>
                        <label>evict</label>
                        <label>lirs</label>
                    </labels>
                <created>Thu, 8 Dec 2011 14:38:28 -0600</created>
                <updated>Thu, 8 Dec 2011 14:38:50 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CCACHE-14] Asynchronous Cache Support</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-14</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;If people start implementing the cache protocol on top of external caches: Memcache, Redis, or others, an async version could make sense. &lt;/p&gt;

&lt;p&gt;I started toying with an AsyncCacheProtocol which for all functions returning values would take two arities, a standard one which would return an instance of IRef, a second one which would take an extra callback argument to be called with the results. This doesn&apos;t solve everything though and async versions of LRU and friends would have to be implemented.&lt;/p&gt;

&lt;p&gt;The alternative would be to have additional calls in CacheProtocol, such as async-has? async-lookup which would implement the 2 arity semantics and then rely on the fact that the underlying cache respects some sort of async semantics, since we cannot do that with Associative, maybe another middleman protocol CacheStorage could be used, this way, all external cache providers would have to do is implement a CacheProvider with optional asynchronous support.&lt;/p&gt;

&lt;p&gt;I hope at least part of this makes sense.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15068">CCACHE-14</key>
            <summary>Asynchronous Cache Support</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="pyr">Pierre-Yves Ritschard</reporter>
                        <labels>
                    </labels>
                <created>Tue, 13 Dec 2011 16:33:21 -0600</created>
                <updated>Tue, 13 Dec 2011 16:33:21 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CCACHE-15] It appears that TTL cache exhibits quadratic performance (+ its evict is buggy)</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-15</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;The library looks useful, thanks! &lt;/p&gt;

&lt;p&gt;I looked at the code, and unless I&apos;m mistaken, every cache miss seems to result in a full pass over the entire cache to evict old entries.  The performance implications of this would be unacceptable for my target application.  Replacing the TTL data structure with a persistent analog of a LinkedHashMap and using a take-while instead could fix this problem.&lt;/p&gt;

&lt;p&gt;Also, evict seems to pass the cache in twice, rather than the cache and the TTL...&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15073">CCACHE-15</key>
            <summary>It appears that TTL cache exhibits quadratic performance (+ its evict is buggy)</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="jawolfe">Jason Wolfe</reporter>
                        <labels>
                    </labels>
                <created>Wed, 14 Dec 2011 19:20:01 -0600</created>
                <updated>Thu, 15 Dec 2011 12:21:46 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="27468" author="fogus" created="Thu, 15 Dec 2011 12:21:46 -0600"  >&lt;p&gt;TTLCache eviction fixed.  Patches welcomed for the other change, but we might be able to get away with a sorted map  ttl map.&lt;/p&gt;
</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CCACHE-16] Benchmark v0.5.x against Google Guava</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-16</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;Perform some tests and benchmarks of core.cache and Google Guava&apos;s com.google.common.cache library.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15074">CCACHE-16</key>
            <summary>Benchmark v0.5.x against Google Guava</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                        <label>benchmark</label>
                        <label>cache</label>
                        <label>guava</label>
                    </labels>
                <created>Fri, 16 Dec 2011 08:55:39 -0600</created>
                <updated>Fri, 16 Dec 2011 08:55:39 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CCACHE-17] Create function backed cache</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-17</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;A cache implementation that is backed by a function that performs some action on a cache miss could serve as a front for any of the existing cache impls.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15075">CCACHE-17</key>
            <summary>Create function backed cache</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                        <label>cache</label>
                        <label>fn-cache</label>
                        <label>new-feature</label>
                    </labels>
                <created>Fri, 16 Dec 2011 08:57:37 -0600</created>
                <updated>Mon, 19 Dec 2011 07:29:30 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27477" author="richhickey" created="Fri, 16 Dec 2011 09:45:18 -0600"  >&lt;p&gt;It doesn&apos;t perform an action per se, it gets a passed key and returns a value, which the cache then caches (associates with the key) and returns. The tricky bit is when the function can&apos;t get a value. There needs to be some protocol for communicating that (could be like 3 arg get), and, should the cache be asked again later for the same key, calling the fn again.&lt;/p&gt;</comment>
                    <comment id="27483" author="fogus" created="Mon, 19 Dec 2011 07:29:30 -0600"  >&lt;p&gt;Thanks for the feedback Rich.  I believe I understand the subtleties now.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CCACHE-18] Explore JSR 107- Java Temporary Caching API</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-18</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;Is this relevant to core.cache? And many other questions answered.&lt;/p&gt;

&lt;p&gt;&amp;lt;&lt;a href=&quot;http://jcp.org/en/jsr/detail?id=107&quot;&gt;http://jcp.org/en/jsr/detail?id=107&lt;/a&gt;&amp;gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15081">CCACHE-18</key>
            <summary>Explore JSR 107- Java Temporary Caching API</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                        <label>jsr-107</label>
                        <label>research</label>
                    </labels>
                <created>Mon, 19 Dec 2011 07:23:32 -0600</created>
                <updated>Mon, 19 Dec 2011 07:23:32 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CCACHE-20] Add some examples to github page</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-20</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;Could you add some examples on how to use core.cache to github readme?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15213">CCACHE-20</key>
            <summary>Add some examples to github page</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="jsyrjala">Juha Syrj&#228;l&#228;</reporter>
                        <labels>
                    </labels>
                <created>Wed, 8 Feb 2012 23:21:54 -0600</created>
                <updated>Sun, 19 Feb 2012 18:24:14 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27769" author="fogus" created="Sun, 19 Feb 2012 18:24:14 -0600"  >&lt;p&gt;Can do.  In the meantime checkout how core.memoize uses it at &lt;a href=&quot;https://github.com/clojure/core.memoize/blob/master/src/main/clojure/clojure/core/memoize.clj#L50&quot;&gt;https://github.com/clojure/core.memoize/blob/master/src/main/clojure/clojure/core/memoize.clj#L50&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I think I might bring this &lt;tt&gt;through&lt;/tt&gt; fn into core.cache in a more generic way.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CCACHE-26] hit function in LRU cache can give funny results</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-26</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;A common-sense usage in caches is hit/get. But if I naively do this to an LRUCache, without checking first for the presence of the key, I can break the limit.&lt;/p&gt;

&lt;p&gt;(-&amp;gt; (cache/lru-cache-factory {} :threshold 2)&lt;br/&gt;
    (cache/hit :x)&lt;br/&gt;
    (cache/hit :y)&lt;br/&gt;
    (cache/hit :z)&lt;br/&gt;
    (assoc :a 1)&lt;br/&gt;
    (assoc :b 2)&lt;br/&gt;
    (assoc :c 3)&lt;br/&gt;
    (assoc :d 4)&lt;br/&gt;
    (assoc :e 5))&lt;/p&gt;

&lt;p&gt;; {:e 5, :d 4, :c 3, :b 2, :a 1}&lt;/p&gt;</description>
                <environment></environment>
            <key id="15642">CCACHE-26</key>
            <summary>hit function in LRU cache can give funny results</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="arthuredelstein">Arthur Edelstein</reporter>
                        <labels>
                    </labels>
                <created>Wed, 22 Aug 2012 21:06:13 -0500</created>
                <updated>Wed, 22 Aug 2012 21:06:13 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CCACHE-27] Missing LU and LRU is linear complexity - performance</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-27</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;Profiling some code with YourKit showed a hotspot in cache statistics on (miss) for LU and LRU caches.&lt;/p&gt;

&lt;p&gt;Basically two issues:  (count (keys {....})) is a count of a seq, not efficient. Replaced with a count of the map.&lt;/p&gt;

&lt;p&gt;Secondly, (apply f anything) is slow. Profiler showed that the (apply min-key) was really slow.  This is mitigated by using a c.d.priority-map instead.   On a priority-map, (ffirst {}) or (first (peek {}).&lt;/p&gt;

&lt;p&gt;Also inverted the logic for threshold comparison.  Since there is a (build-leastness-queue) that populates statistics, should caches should favor codepaths for the state of being full all the time?&lt;/p&gt;</description>
                <environment>Mac Oracle JDK, Linux OpenJDK</environment>
            <key id="15672">CCACHE-27</key>
            <summary>Missing LU and LRU is linear complexity - performance</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="gshayban@gmail.com">Ghadi Shayban</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>performance</label>
                    </labels>
                <created>Tue, 4 Sep 2012 11:26:54 -0500</created>
                <updated>Wed, 12 Sep 2012 09:27:56 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29391" author="gshayban" created="Thu, 6 Sep 2012 22:49:14 -0500"  >&lt;p&gt;I take back the part about (apply) being slow.  I think it&apos;s more the fact that it&apos;s doing a linear scan on keys every single time.&lt;/p&gt;

&lt;p&gt;(apply) does show up a lot in a profiler, but I haven&apos;t figured out why.  (apply + (range big)) seems to even be slightly faster than (reduce +) on the same range.&lt;/p&gt;
</comment>
                    <comment id="29426" author="gshayban" created="Wed, 12 Sep 2012 09:27:56 -0500"  >&lt;p&gt;Patch in proper format&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11492" name="priority-map-fixed.patch" size="5639" author="gshayban" created="Wed, 12 Sep 2012 09:27:56 -0500" />
                    <attachment id="11475" name="priority-map.patch" size="4909" author="gshayban@gmail.com" created="Tue, 4 Sep 2012 11:26:54 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CCACHE-28] SoftCache NullPointerException in has? with many threads</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-28</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;&quot;cell&quot; can be null on this call to SoftReference.get():&lt;br/&gt;
&lt;a href=&quot;https://github.com/clojure/core.cache/blob/master/src/main/clojure/clojure/core/cache.clj#L501&quot;&gt;https://github.com/clojure/core.cache/blob/master/src/main/clojure/clojure/core/cache.clj#L501&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the cache did not contain &quot;item&quot; in the call to (get cache item) in the let binding, but another thread pre-empts and adds it before the subsequent call to contains?, we&apos;ll attempt to call .get() on nil.&lt;/p&gt;

&lt;p&gt;Would it perhaps be sufficient to just check whether cell is nil instead of calling contains? in the check on the previous line?&lt;/p&gt;</description>
                <environment>Linux, Oracle JRE 1.6</environment>
            <key id="15775">CCACHE-28</key>
            <summary>SoftCache NullPointerException in has? with many threads</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="jaley">James Aley</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Oct 2012 08:42:28 -0500</created>
                <updated>Sat, 9 Feb 2013 06:27:03 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30573" author="pjstadig" created="Sat, 9 Feb 2013 06:13:39 -0600"  >&lt;p&gt;Good catch!&lt;/p&gt;

&lt;p&gt;This is rather simple to reproduce:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(use &apos;clojure.core.cache)
(def cache (soft-reference-cache {}))
(def mutator (&lt;span class=&quot;code-object&quot;&gt;Thread&lt;/span&gt;. #(loop [] (assoc cache :foo :bar) (dissoc cache :foo) (recur))))
(.start mutator)
(loop [] (has? cache :foo) (recur))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The attached patch fixes the issue, by not referring back to the cache after attempting to pull out a SoftReference.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11844" name="0001-CCACHE-28-fixes-concurrency-bug-in-has.patch" size="1108" author="pjstadig" created="Sat, 9 Feb 2013 06:13:39 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CCACHE-29] Is IPersistentCollection definition of cons correct?</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-29</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;Here&apos;s the definition of `cons` for caches:&lt;/p&gt;

&lt;p&gt;      clojure.lang.IPersistentCollection&lt;br/&gt;
       (cons &lt;a href=&quot;#elem#&quot;&gt;_# elem#&lt;/a&gt;&lt;br/&gt;
         (clojure.core/cons ~base-field elem#))&lt;/p&gt;

&lt;p&gt;This seems wrong to me. Note first that the arguments to `clojure.core/cons` are in the wrong order. As a result, the result of (for example) conj is incorrect. Consider this:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (def starts-with-a (cache/fifo-cache-factory {:a 1} :threshold 3))&lt;/p&gt;

&lt;p&gt;#&apos;user/starts-with-a&lt;br/&gt;
user=&amp;gt; starts-with-a&lt;br/&gt;
{:a 1}&lt;br/&gt;
user=&amp;gt; (conj starts-with-a &lt;span class=&quot;error&quot;&gt;&amp;#91;:c 3&amp;#93;&lt;/span&gt;)&lt;br/&gt;
({:a 1} :c 3)&lt;/p&gt;

&lt;p&gt;Even if the argument order was correct, the result would still be a sequence rather than the type of the base field. I think you want something more like &lt;/p&gt;


&lt;p&gt;     clojure.lang.IPersistentCollection&lt;br/&gt;
       (cons &lt;a href=&quot;#elem#&quot;&gt;this# elem#&lt;/a&gt;&lt;br/&gt;
         (apply assoc this# elem#))&lt;/p&gt;

&lt;p&gt;After all, this particular collection is an IPersistentMap, so its `conj` and `into` behavior should be the same as other objects for which `map?` is true.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15832">CCACHE-29</key>
            <summary>Is IPersistentCollection definition of cons correct?</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="marick">Brian Marick</reporter>
                        <labels>
                    </labels>
                <created>Sun, 18 Nov 2012 15:44:43 -0600</created>
                <updated>Sun, 18 Nov 2012 15:44:43 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CCACHE-30] make-reference need not be dynamic</title>
                <link>http://dev.clojure.org/jira/browse/CCACHE-30</link>
                <project id="10171" key="CCACHE">core.cache</project>
                        <description>&lt;p&gt;It looks like make-reference was made dynamic to support multiple clojure versions.  Rebinding make-reference is really only needed for tests, and it would be a shame if making it dynamic causes performance issues.&lt;/p&gt;

&lt;p&gt;Perhaps it is not enough of a performance issue to worry about.  Otherwise, it might be possible to work around it.  Perhaps directly pasting in and using the with-redefs macro, or something similar?&lt;/p&gt;</description>
                <environment></environment>
            <key id="15995">CCACHE-30</key>
            <summary>make-reference need not be dynamic</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="pjstadig">Paul Stadig</reporter>
                        <labels>
                    </labels>
                <created>Sat, 9 Feb 2013 06:26:33 -0600</created>
                <updated>Sat, 9 Feb 2013 06:26:33 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CINCU-1] Reflection warnings</title>
                <link>http://dev.clojure.org/jira/browse/CINCU-1</link>
                <project id="10042" key="CINCU">core.incubator</project>
                        <description>&lt;p&gt;The following reflection warnings are reported when using core.incubator - I was given the impression that &quot;standard&quot; (i.e., new contrib) libraries shouldn&apos;t have any:&lt;/p&gt;

&lt;p&gt;Reflection warning, clojure/core/incubator.clj:84 - reference to field&lt;br/&gt;
getClass can&apos;t be resolved.&lt;br/&gt;
Reflection warning, clojure/core/incubator.clj:84 - reference to field&lt;br/&gt;
isArray can&apos;t be resolved.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14543">CINCU-1</key>
            <summary>Reflection warnings</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="seancorfield">Sean Corfield</reporter>
                        <labels>
                    </labels>
                <created>Thu, 28 Jul 2011 19:04:05 -0500</created>
                <updated>Thu, 28 Jul 2011 19:04:05 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CINCU-2] Add type hints to eliminate reflection in core.incubator</title>
                <link>http://dev.clojure.org/jira/browse/CINCU-2</link>
                <project id="10042" key="CINCU">core.incubator</project>
                        <description>&lt;p&gt;There are a few reflection warnings when compiling core.incubator&lt;/p&gt;</description>
                <environment></environment>
            <key id="15791">CINCU-2</key>
            <summary>Add type hints to eliminate reflection in core.incubator</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 28 Oct 2012 17:34:52 -0500</created>
                <updated>Sun, 28 Oct 2012 17:38:08 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29840" author="jafingerhut" created="Sun, 28 Oct 2012 17:38:08 -0500"  >&lt;p&gt;cincu-2-eliminate-reflection-v1.txt dated Oct 28 2012 eliminates reflection in core.incubator by adding type hints.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11627" name="cincu-2-eliminate-reflection-v1.txt" size="1574" author="jafingerhut" created="Sun, 28 Oct 2012 17:38:08 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CINCU-3] apply-kw</title>
                <link>http://dev.clojure.org/jira/browse/CINCU-3</link>
                <project id="10042" key="CINCU">core.incubator</project>
                        <description>&lt;p&gt;Thread: &lt;a href=&quot;https://groups.google.com/d/topic/clojure-dev/9ctJC-LXNps/discussion&quot;&gt;https://groups.google.com/d/topic/clojure-dev/9ctJC-LXNps/discussion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add a function apply-kw, that can be used to apply a function with keyword args to a keyword argument map&lt;/p&gt;</description>
                <environment></environment>
            <key id="15870">CINCU-3</key>
            <summary>apply-kw</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bendlas">Herwig Hochleitner</reporter>
                        <labels>
                    </labels>
                <created>Mon, 3 Dec 2012 11:21:29 -0600</created>
                <updated>Mon, 3 Dec 2012 11:25:17 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30162" author="bendlas" created="Mon, 3 Dec 2012 11:22:41 -0600"  >&lt;p&gt;Patch + Test attached&lt;/p&gt;</comment>
                    <comment id="30163" author="bendlas" created="Mon, 3 Dec 2012 11:25:17 -0600"  >&lt;p&gt;Cleaned up patch&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11742" name="0001-CINCU-3-Implement-and-test-apply-kw.patch" size="2151" author="bendlas" created="Mon, 3 Dec 2012 11:25:17 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CLJCLR-11] Simplify integration of Clojure code with existing .NET code</title>
                <link>http://dev.clojure.org/jira/browse/CLJCLR-11</link>
                <project id="10173" key="CLJCLR">ClojureCLR</project>
                        <description>&lt;p&gt;It would be nice to have a nice high-level wrapper class for key Clojure integration functions.  In IronPython for example, there is a IronPython.Hosting.Python class.  For ClojureCLR, I created the attached clojure.lang.Hosting.Clojure class which provides three simple functions Require, GetVar, and AddNamespaceLoadMapping (for integrating .clj files into .NET assemblies as embedded resources).  This class or one like it is a simple suggestion to make integration with existing code as painless as possible.&lt;/p&gt;

&lt;p&gt;Sample usage:&lt;/p&gt;

&lt;p&gt;Clojure.GetVar(&quot;clojure.main&quot;, &quot;main&quot;).invoke();  // Starts an embedded Clojure REPL&lt;/p&gt;

&lt;p&gt;This is much simpler than:&lt;/p&gt;

&lt;p&gt;Symbol CLOJURE_MAIN = Symbol.intern(&quot;clojure.main&quot;);&lt;br/&gt;
Var REQUIRE = RT.var(&quot;clojure.core&quot;, &quot;require&quot;);&lt;br/&gt;
REQUIRE.invoke(CLOJURE_MAIN);&lt;br/&gt;
RT.var(&quot;clojure.main&quot;, &quot;main&quot;).invoke().&lt;/p&gt;</description>
                <environment></environment>
            <key id="16040">CLJCLR-11</key>
            <summary>Simplify integration of Clojure code with existing .NET code</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dmiller">David Miller</assignee>
                                <reporter username="aaroncr">Aaron Craelius</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 20:16:34 -0600</created>
                <updated>Wed, 6 Mar 2013 20:42:29 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30707" author="aaroncr" created="Wed, 6 Mar 2013 20:42:29 -0600"  >&lt;p&gt;This is an updated patch that supercedes the previous patch adds an AddToLoadPath method.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11896" name="clojure-hosting2.patch" size="4642" author="aaroncr" created="Wed, 6 Mar 2013 20:42:29 -0600" />
                    <attachment id="11889" name="clojure-hosting.patch" size="3421" author="aaroncr" created="Sun, 3 Mar 2013 20:16:34 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CMEMOIZE-2] Deprecate Unk</title>
                <link>http://dev.clojure.org/jira/browse/CMEMOIZE-2</link>
                <project id="10172" key="CMEMOIZE">core.memoize</project>
                        <description>&lt;p&gt;core.memoize was originally &lt;a href=&quot;http://github.com/fogus/unk&quot;&gt;Unk &lt;/a&gt;, but its inclusion into contrib means the latter is redundant.  The Unk repo should indicate the move and change to a place for docs and examples.  Likewise, a formal announcement should be made.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15066">CMEMOIZE-2</key>
            <summary>Deprecate Unk</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                        <label>documentation</label>
                        <label>unk</label>
                    </labels>
                <created>Tue, 13 Dec 2011 07:58:35 -0600</created>
                <updated>Tue, 13 Dec 2011 07:58:35 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CTYP-1] Support Java Generics</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-1</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;Support Java Generics&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/MichaelBlume/3c0a917e0ab665c75d26&quot;&gt;https://gist.github.com/MichaelBlume/3c0a917e0ab665c75d26&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existential types might be an issue.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16041">CTYP-1</key>
            <summary>Support Java Generics</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 20:51:19 -0600</created>
                <updated>Sun, 3 Mar 2013 20:51:19 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-4] Support complex multimethods</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-4</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;Currently only single dispatch multimethods are supported.&lt;/p&gt;

&lt;p&gt;Multiple dispatch should also be supported.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16044">CTYP-4</key>
            <summary>Support complex multimethods</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 20:56:25 -0600</created>
                <updated>Sun, 3 Mar 2013 20:56:25 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-6] Infer more methods</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-6</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;If the Compiler doesn&apos;t provide us with an expected method/field, we currently give up. We can do better than this.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16046">CTYP-6</key>
            <summary>Infer more methods</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 21:09:44 -0600</created>
                <updated>Sun, 3 Mar 2013 21:09:44 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-8] Support complex map manipulation functions</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-8</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;update-in, assoc-in, select-keys&lt;/p&gt;</description>
                <environment></environment>
            <key id="16048">CTYP-8</key>
            <summary>Support complex map manipulation functions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 21:14:59 -0600</created>
                <updated>Fri, 8 Mar 2013 06:23:42 -0600</updated>
                                                    <fixVersion>0.2.0</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-9] Support metadata types</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-9</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;Metadata kinda works, but needs more tests and special cases for `with-meta` and `meta`.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16049">CTYP-9</key>
            <summary>Support metadata types</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 21:17:04 -0600</created>
                <updated>Sun, 3 Mar 2013 21:17:04 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-10] Support Clojure records</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-10</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;Seems like HMaps + Datatypes, except for weird `dissoc` behaviour of losing type when dissocing all of the base keys.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16050">CTYP-10</key>
            <summary>Support Clojure records</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 21:17:59 -0600</created>
                <updated>Sun, 7 Apr 2013 21:21:57 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30906" author="ambrosebs" created="Sun, 7 Apr 2013 21:21:57 -0500"  >&lt;p&gt;0.1.12 adds `ann-record` and `ann-precord`, support for checking `defrecord` and some `assoc` forms.&lt;/p&gt;

&lt;p&gt;Still need to work out how it interacts with other operations (eg. dissoc, merge).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-11] Infer good types for loop locals</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-11</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;Loop locals need a decent type generalisation scheme. Use Typed Racket&apos;s as a model.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16051">CTYP-11</key>
            <summary>Infer good types for loop locals</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 21:19:31 -0600</created>
                <updated>Sun, 3 Mar 2013 21:19:31 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-12] Handle primitives properly</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-12</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;Currently Java primitives can travel anywhere, without consideration for boxing.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16052">CTYP-12</key>
            <summary>Handle primitives properly</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 21:23:48 -0600</created>
                <updated>Sun, 3 Mar 2013 21:23:48 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-13] Understand common contract functions</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-13</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;juxt, every?, comp, partial, are very useful for type information.&lt;/p&gt;

&lt;p&gt;The idiom (every? p? (keys m)) should cast maps.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16053">CTYP-13</key>
            <summary>Understand common contract functions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 3 Mar 2013 21:30:23 -0600</created>
                <updated>Sun, 3 Mar 2013 21:30:23 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[CTYP-15] Eliminate the need to specify all ancestors in alter-class.</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-15</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description></description>
                <environment></environment>
            <key id="16065">CTYP-15</key>
            <summary>Eliminate the need to specify all ancestors in alter-class.</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Fri, 8 Mar 2013 07:07:44 -0600</created>
                <updated>Fri, 8 Mar 2013 07:40:25 -0600</updated>
                                                    <fixVersion>0.2.0</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CTYP-16] Parameterise IFn instead of special function type.</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-16</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description></description>
                <environment></environment>
            <key id="16066">CTYP-16</key>
            <summary>Parameterise IFn instead of special function type.</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Fri, 8 Mar 2013 07:13:44 -0600</created>
                <updated>Sun, 10 Mar 2013 07:15:50 -0500</updated>
                                                    <fixVersion>0.2.0</fixVersion>
                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[CTYP-18] Implement equality filters</title>
                <link>http://dev.clojure.org/jira/browse/CTYP-18</link>
                <project id="10271" key="CTYP">core.typed</project>
                        <description>&lt;p&gt;Equality filters show that two local bindings are essentially equivalent (eg. aliased). This is useful where macros alias user-known locals with gensyms, like in :as map destructuring.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16070">CTYP-18</key>
            <summary>Implement equality filters</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Sun, 10 Mar 2013 07:24:33 -0500</created>
                <updated>Sun, 10 Mar 2013 07:24:33 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DCODEC-1] Add simple utility functions for base64 conversions?</title>
                <link>http://dev.clojure.org/jira/browse/DCODEC-1</link>
                <project id="10085" key="DCODEC">clojure.data.codec</project>
                        <description>&lt;p&gt;Can we add (something like) the following simple utility functions for base64 encoding/decoding ?&lt;/p&gt;

&lt;p&gt;(defn bytes-&amp;gt;b64str &lt;span class=&quot;error&quot;&gt;&amp;#91;bytes&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (String. (encode bytes)))&lt;/p&gt;

&lt;p&gt;(defn str-&amp;gt;b64str &lt;span class=&quot;error&quot;&gt;&amp;#91;s&amp;#93;&lt;/span&gt;&lt;br/&gt;
  (bytes-&amp;gt;b64str (.getBytes s)))&lt;/p&gt;

&lt;p&gt;(defn b64str-&amp;gt;bytes &lt;span class=&quot;error&quot;&gt;&amp;#91;b64-str&amp;#93;&lt;/span&gt; &lt;br/&gt;
  (decode (.getBytes b64-str)))&lt;/p&gt;

&lt;p&gt;(defn b64str-&amp;gt;str &lt;span class=&quot;error&quot;&gt;&amp;#91;b64-str&amp;#93;&lt;/span&gt; &lt;br/&gt;
  (String. (b64str-&amp;gt;bytes b64-str)))&lt;/p&gt;</description>
                <environment></environment>
            <key id="15820">DCODEC-1</key>
            <summary>Add simple utility functions for base64 conversions?</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ataggart">Alexander Taggart</assignee>
                                <reporter username="davesann">Dave Sann</reporter>
                        <labels>
                    </labels>
                <created>Sun, 11 Nov 2012 03:36:18 -0600</created>
                <updated>Sun, 11 Nov 2012 03:36:18 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DCSV-1] pom.xml directives</title>
                <link>http://dev.clojure.org/jira/browse/DCSV-1</link>
                <project id="10074" key="DCSV">data.csv</project>
                        <description>&lt;p&gt;If you build data.csv alone with the current pom.xml you get a couple of warnings and test are not executed. With the recent versions of Maven, these warnings can break the build.&lt;/p&gt;

&lt;p&gt;A fixed (I hope!) version is attached.&lt;/p&gt;</description>
                <environment>Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)&lt;br/&gt;
Maven home: /usr/share/maven&lt;br/&gt;
Java version: 1.6.0_29, vendor: Apple Inc.&lt;br/&gt;
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home&lt;br/&gt;
Default locale: it_IT, platform encoding: MacRoman&lt;br/&gt;
OS name: &amp;quot;mac os x&amp;quot;, version: &amp;quot;10.7.2&amp;quot;, arch: &amp;quot;x86_64&amp;quot;, family: &amp;quot;mac&amp;quot;</environment>
            <key id="15216">DCSV-1</key>
            <summary>pom.xml directives</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="jonase">Jonas Enlund</assignee>
                                <reporter username="giorgio_v">Giorgio Valoti</reporter>
                        <labels>
                    </labels>
                <created>Fri, 10 Feb 2012 04:59:36 -0600</created>
                <updated>Fri, 10 Feb 2012 04:59:36 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="10900" name="pom.xml" size="2182" author="giorgio_v" created="Fri, 10 Feb 2012 04:59:36 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10009">Fixed</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DCSV-4] \return as record separator with unquoted fields is read as part of the field</title>
                <link>http://dev.clojure.org/jira/browse/DCSV-4</link>
                <project id="10074" key="DCSV">data.csv</project>
                        <description>&lt;p&gt;This regards the gray area of being &quot;more forgiving.&quot; If I understand RFC 4180 correctly, I want to suggest substituting one bit of forgiveness for another: rather than supporting unquoted, multi-line cell values, I suggest supporting CSVs with just \return as the record-separator. Would you accept a patch for that?&lt;/p&gt;

&lt;p&gt;A file with \return as record-separator is interpreted by read-csv as a single row like (&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;quot;Header1&amp;quot; &amp;quot;Header2\rval1&amp;quot; &amp;quot;val2&amp;quot;&amp;#93;&lt;/span&gt;). I believe the RFC only allows fields to contain CR and LF when they&apos;re &lt;tt&gt;escaped&lt;/tt&gt; (i.e., surrounded in double quotes). See the ABNF at the end of &lt;a href=&quot;http://tools.ietf.org/html/rfc4180#section-2&quot;&gt;section 2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As far as implementation, I believe this would require wrapping any Reader w/o markSupported in one that does, so that the LF following a CR can be consumed when present.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;I&amp;#39;ve classified this as a major defect because I ran into a \return-delimited file as soon as I passed a CSV from a Linux machine to a Windows machine, so I&amp;#39;m guessing these files are common. Feel free to reclassify.&amp;#93;&lt;/span&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15777">DCSV-4</key>
            <summary>\return as record separator with unquoted fields is read as part of the field</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="jonase">Jonas Enlund</assignee>
                                <reporter username="duelin_markers">John Hume</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Oct 2012 13:55:57 -0500</created>
                <updated>Wed, 24 Oct 2012 15:00:49 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29795" author="jonase" created="Wed, 24 Oct 2012 15:00:49 -0500"  >&lt;p&gt;&amp;gt; rather than supporting unquoted, multi-line cell values, I suggest supporting CSVs with just \return as the record-separator. Would you accept a patch for that?&lt;/p&gt;

&lt;p&gt;Sounds good to me.&lt;/p&gt;

&lt;p&gt;&amp;gt; As far as implementation, I believe this would require wrapping any Reader w/o markSupported in one that does&lt;/p&gt;

&lt;p&gt;I think that&apos;s ok, since BufferedReader supports it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DCSV-5] No option for parsing into maps</title>
                <link>http://dev.clojure.org/jira/browse/DCSV-5</link>
                <project id="10074" key="DCSV">data.csv</project>
                        <description>&lt;p&gt;I imagine a very common use case for parsing CSVs is to get the output as a sequence of maps. I&apos;m happy to provide a patch for this but wanted to make sure I had the right design.&lt;/p&gt;

&lt;p&gt;My initial idea is to add another option to read-csv with the name :headers which can be a sequence of values, or a flag such as :first-row. Presumably though we ought to also support using the first row as keywords rather than strings, so I&apos;m not sure whether that ought to be another option or a different flag (e.g., :first-row-keywords).&lt;/p&gt;</description>
                <environment></environment>
            <key id="16197">DCSV-5</key>
            <summary>No option for parsing into maps</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="jonase">Jonas Enlund</assignee>
                                <reporter username="gfredericks">Gary Fredericks</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 May 2013 11:30:25 -0500</created>
                <updated>Tue, 21 May 2013 13:28:44 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31129" author="jonase" created="Tue, 21 May 2013 13:28:44 -0500"  >&lt;p&gt;I&apos;ve seen this feature request before so I think that something like this should be added. One approach would be to provide a helper function:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn csv-data-&amp;gt;maps [vecs]
  (map zipmap (repeat (first vecs)) (&lt;span class=&quot;code-keyword&quot;&gt;rest&lt;/span&gt; vecs)))

(csv-data-&amp;gt;maps (read-csv reader))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DJSON-9] Always escape U+2028 and U+2029 to be nice to broken JSON parsers</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-9</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;U+2028 and U+2029 should be treated like \n and, viz, escaped even when &amp;#42;escape-unicode&amp;#42; is false.&lt;/p&gt;

&lt;p&gt;A number of JSON parsers (such as ExtJS&apos;s) think they can eval JSON in a JS runtime to decode it. This is not true, since JS does not allow U+2028 and U+2029 unescaped in strings:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://timelessrepo.com/json-isnt-a-javascript-subset&quot;&gt;http://timelessrepo.com/json-isnt-a-javascript-subset&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While this is broken behavior, it is also quite common, so escaping these characters uniformly may ease some developer pain and surprise.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16168">DJSON-9</key>
            <summary>Always escape U+2028 and U+2029 to be nice to broken JSON parsers</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="timmc">Tim McCormack</reporter>
                        <labels>
                    </labels>
                <created>Sun, 28 Apr 2013 21:45:46 -0500</created>
                <updated>Sun, 28 Apr 2013 21:46:10 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31017" author="timmc" created="Sun, 28 Apr 2013 21:46:10 -0500"  >&lt;p&gt;Attached patch.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11974" name="0001-Escape-JS-forbidden-unicode-chars-to-be-nice-to-brok.patch" size="2366" author="timmc" created="Sun, 28 Apr 2013 21:45:46 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DJSON-11] Commas still don&apos;t work properly in all cases for removed values via value-fn</title>
                <link>http://dev.clojure.org/jira/browse/DJSON-11</link>
                <project id="10041" key="DJSON">data.json</project>
                        <description>&lt;p&gt;DSON-7 fixes the problem with printing JSON with extra commas, but only as long as the last item is actually printable (the test doesn&apos;t appear to demonstrate this, but the keys are iterated in hash order, not insertion order). If the last item&apos;s no good, we still have a problem.&lt;/p&gt;

&lt;p&gt;The best way to handle this without trying to precalculate value-fn for the next value (in case it&apos;s not needed) is to insert the comma BEFORE we print the current value, but only if it&apos;s not the first thing to be printed.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16189">DJSON-11</key>
            <summary>Commas still don&apos;t work properly in all cases for removed values via value-fn</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jstoneham">John Stoneham</reporter>
                        <labels>
                    </labels>
                <created>Thu, 16 May 2013 21:21:08 -0500</created>
                <updated>Fri, 17 May 2013 08:33:47 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31097" author="jafingerhut" created="Fri, 17 May 2013 08:33:47 -0500"  >&lt;p&gt;Doh!  Patch djson-11-fix-comma-printing-patch-v1.txt dated May 17 2013 should really fix things, including changing the test to exhibit the problem (before this fix).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11993" name="djson-11-fix-comma-printing-patch-v1.txt" size="2627" author="jafingerhut" created="Fri, 17 May 2013 08:33:47 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DPRIMAP-3] Add more developer info and Markdown markup to README</title>
                <link>http://dev.clojure.org/jira/browse/DPRIMAP-3</link>
                <project id="10076" key="DPRIMAP">data.priority-map</project>
                        <description>&lt;p&gt;Just a bit more tweaking of the README.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16123">DPRIMAP-3</key>
            <summary>Add more developer info and Markdown markup to README</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="markengelberg">Mark Engelberg</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Tue, 2 Apr 2013 13:19:14 -0500</created>
                <updated>Tue, 2 Apr 2013 13:20:02 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30858" author="jafingerhut" created="Tue, 2 Apr 2013 13:19:51 -0500"  >&lt;p&gt;Patch dprimap-readme-touchups-patch-v1.txt&lt;/p&gt;

&lt;p&gt;To see how these changes look on Github, see my forked version here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/jafingerhut/data.priority-map/tree/cleanup-readme&quot;&gt;https://github.com/jafingerhut/data.priority-map/tree/cleanup-readme&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11937" name="dprimap-readme-touchups-patch-v1.txt" size="7089" author="jafingerhut" created="Tue, 2 Apr 2013 13:19:51 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DPRIMAP-4] There is one reflection warning in data.priority-map when invoking .equiv</title>
                <link>http://dev.clojure.org/jira/browse/DPRIMAP-4</link>
                <project id="10076" key="DPRIMAP">data.priority-map</project>
                        <description>&lt;p&gt;Reflection warning, clojure/data/priority_map.clj:215:19 - call to equiv can&apos;t be resolved.&lt;/p&gt;

&lt;p&gt;That line of source is this one inside the deftype for PersistentPriorityMap:&lt;br/&gt;
  (equiv &lt;span class=&quot;error&quot;&gt;&amp;#91;this o&amp;#93;&lt;/span&gt; (.equiv item-&amp;gt;priority o))&lt;/p&gt;</description>
                <environment></environment>
            <key id="16161">DPRIMAP-4</key>
            <summary>There is one reflection warning in data.priority-map when invoking .equiv</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="markengelberg">Mark Engelberg</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Thu, 25 Apr 2013 13:18:59 -0500</created>
                <updated>Sun, 28 Apr 2013 02:50:43 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31012" author="jafingerhut" created="Sun, 28 Apr 2013 02:50:28 -0500"  >&lt;p&gt;Patch dprimap-4-eliminate-equiv-reflection-patch-v1.txt dated Apr 28 2013 eliminates an occurrence of reflection in the call to .equiv by adding a type hint.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11972" name="dprimap-4-eliminate-equiv-reflection-patch-v1.txt" size="1045" author="jafingerhut" created="Sun, 28 Apr 2013 02:50:28 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DPRIMAP-5] Add support for subseq, rsubseq</title>
                <link>http://dev.clojure.org/jira/browse/DPRIMAP-5</link>
                <project id="10076" key="DPRIMAP">data.priority-map</project>
                        <description>&lt;p&gt;This depends upon some kind of change to clojure.core, either to the Sorted interface or the implementation of subseq and rsubseq, as discussed in this thread: &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/fdb000cae4f66a95&quot;&gt;http://groups.google.com/group/clojure-dev/browse_thread/thread/fdb000cae4f66a95&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a ticket &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-428&quot; title=&quot;subseq, rsubseq enhancements to support priority maps?&quot;&gt;CLJ-428&lt;/a&gt; for these proposed clojure.core changes.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16165">DPRIMAP-5</key>
            <summary>Add support for subseq, rsubseq</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="markengelberg">Mark Engelberg</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 28 Apr 2013 02:22:04 -0500</created>
                <updated>Sun, 28 Apr 2013 03:05:50 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31011" author="jafingerhut" created="Sun, 28 Apr 2013 02:25:17 -0500"  >&lt;p&gt;Patch dprimap-5-add-support-for-subseq-rsubseq-patch-v1.txt dated Apr 28 2013 depends upon Mark Engelberg&apos;s &quot;inclusive&quot; patch for &lt;a href=&quot;http://dev.clojure.org/jira/browse/CLJ-428&quot; title=&quot;subseq, rsubseq enhancements to support priority maps?&quot;&gt;CLJ-428&lt;/a&gt;, or something similar, being accepted into clojure.core.&lt;/p&gt;

&lt;p&gt;It mostly just uncomments some code that Mark wrote, but also slightly modifies the implementation of seqFrom to take advantage of that new parameter.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11971" name="dprimap-5-add-support-for-subseq-rsubseq-patch-v1.txt" size="6026" author="jafingerhut" created="Sun, 28 Apr 2013 02:25:17 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[DXML-10] Support for DOCTYPE when emitting XML</title>
                <link>http://dev.clojure.org/jira/browse/DXML-10</link>
                <project id="10077" key="DXML">data.xml</project>
                        <description>&lt;p&gt;Some consumers of XML files require an explicit DOCTYPE to accept an XML file. data.xml does not currently support the specification of doctypes when emitting XML. When XML is parsed, I believe DOCTYPEs are silently ignored, so there is no representation in the data model for them. The best design is possibly an :doctype option in clojure.data.xml/emit ?&lt;/p&gt;

&lt;p&gt;I&apos;ve attached a web.xml as example.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15824">DXML-10</key>
            <summary>Support for DOCTYPE when emitting XML</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ryansenior">Ryan Senior</assignee>
                                <reporter username="tgk">Thomas Greve Kristensen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 14 Nov 2012 02:06:10 -0600</created>
                <updated>Wed, 14 Nov 2012 02:06:10 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11675" name="web.xml" size="427" author="tgk" created="Wed, 14 Nov 2012 02:06:10 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DXML-13] Support for preserving whitespace between tags</title>
                <link>http://dev.clojure.org/jira/browse/DXML-13</link>
                <project id="10077" key="DXML">data.xml</project>
                        <description>&lt;p&gt;XML parsers can support preserving white space nodes, but clojure.data.xml does not seem to support this functionality.&lt;/p&gt;

&lt;p&gt;For example, the following should be able to return true (perhaps with an option to parse-str):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-style: solid;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;border-bottom-style: solid;&quot;&gt;&lt;b&gt;Desired Behavior&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(= (clojure.data.xml/element :x {}
                             (clojure.data.xml/element :a {} &lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt;)
                             &lt;span class=&quot;code-quote&quot;&gt;&quot; &quot;&lt;/span&gt;
                             (clojure.data.xml/element :a {} &lt;span class=&quot;code-quote&quot;&gt;&quot;bar&quot;&lt;/span&gt;))
   (clojure.data.xml/parse-str
     (str &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;?xml version=\&quot;&lt;/span&gt;1.0\&lt;span class=&quot;code-quote&quot;&gt;&quot; encoding=\&quot;&lt;/span&gt;UTF-8\&lt;span class=&quot;code-quote&quot;&gt;&quot;?&amp;gt;&quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;x&amp;gt;&quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;a&amp;gt;foo&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot; &quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;a&amp;gt;bar&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;/x&amp;gt;&quot;&lt;/span&gt;)))
;=&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is the current behavior:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-style: solid;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;border-bottom-style: solid;&quot;&gt;&lt;b&gt;Current Behavior&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(= (clojure.data.xml/element :x {}
                             (clojure.data.xml/element :a {} &lt;span class=&quot;code-quote&quot;&gt;&quot;foo&quot;&lt;/span&gt;)
                             (clojure.data.xml/element :a {} &lt;span class=&quot;code-quote&quot;&gt;&quot;bar&quot;&lt;/span&gt;))
   (clojure.data.xml/parse-str
     (str &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;?xml version=\&quot;&lt;/span&gt;1.0\&lt;span class=&quot;code-quote&quot;&gt;&quot; encoding=\&quot;&lt;/span&gt;UTF-8\&lt;span class=&quot;code-quote&quot;&gt;&quot;?&amp;gt;&quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;x&amp;gt;&quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;a&amp;gt;foo&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot; &quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;a&amp;gt;bar&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;
          &lt;span class=&quot;code-quote&quot;&gt;&quot;&amp;lt;/x&amp;gt;&quot;&lt;/span&gt;)))
;=&amp;gt; &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15998">DXML-13</key>
            <summary>Support for preserving whitespace between tags</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ryansenior">Ryan Senior</assignee>
                                <reporter username="onlyafly">Kevin Albrecht</reporter>
                        <labels>
                    </labels>
                <created>Sun, 10 Feb 2013 04:35:46 -0600</created>
                <updated>Sun, 10 Feb 2013 04:35:46 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DXML-14] IllegalArgumentException when trying to emit a boolean value</title>
                <link>http://dev.clojure.org/jira/browse/DXML-14</link>
                <project id="10077" key="DXML">data.xml</project>
                        <description>&lt;p&gt;I can create an element with a boolean value but I can&apos;t emit it...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;user=&amp;gt; (emit-str (element :something {} false))&lt;br/&gt;
IllegalArgumentException No implementation of method: :gen-event of protocol:   #&apos;clojure.data.xml/EventGeneration found for class: java.lang.Boolean  clojure.core/-cache-protocol-fn (core_deftype.clj:541)&lt;/p&gt;&lt;/blockquote&gt;</description>
                <environment>JRE 1.7, OS X 10.7.5, Clojure 1.4 &amp;amp; 1.5, data.xml 0.0.7</environment>
            <key id="16061">DXML-14</key>
            <summary>IllegalArgumentException when trying to emit a boolean value</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ryansenior">Ryan Senior</assignee>
                                <reporter username="edoloughlin">Ed O&apos;Loughlin</reporter>
                        <labels>
                    </labels>
                <created>Thu, 7 Mar 2013 05:39:08 -0600</created>
                <updated>Thu, 7 Mar 2013 05:39:08 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DXML-15] data.xml can&apos;t parse own output if there&apos;s a colon in an attribute name</title>
                <link>http://dev.clojure.org/jira/browse/DXML-15</link>
                <project id="10077" key="DXML">data.xml</project>
                        <description>&lt;p&gt;Observe:&lt;/p&gt;

&lt;p&gt;&amp;gt; (x/emit-str (x/element :NC {&quot;xmlns&quot; &quot;http://example.com&quot; &quot;xmlns:xsi&quot; &quot;http://www.w3.org/2001/XMLSchema-instance&quot; &quot;xsi:schemaLocation&quot; &quot;http://www.example.com/schema.xsd&quot;} (x/element :Foo {} &quot;bar&quot;)))&lt;br/&gt;
&quot;&amp;lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&amp;gt;&amp;lt;NC xsi:schemaLocation=\&quot;http://www.example.com/schema.xsd\&quot; xmlns:xsi=\&quot;http://www.w3.org/2001/XMLSchema-instance\&quot; xmlns=\&quot;http://example.com\&quot;&amp;gt;&amp;lt;Foo&amp;gt;bar&amp;lt;/Foo&amp;gt;&amp;lt;/NC&amp;gt;&quot;&lt;br/&gt;
&amp;gt; (x/parse-str *1)&lt;br/&gt;
#clojure.data.xml.Element{:tag :NC, :attrs {:xsi/schemaLocation &quot;http://www.example.com/schema.xsd&quot;}, :content (#clojure.data.xml.Element{:tag :Foo, :attrs {}, :content (&quot;bar&quot;)})}&lt;br/&gt;
a&amp;gt; (x/emit-str *1)&lt;br/&gt;
XMLStreamException Prefix cannot be null  com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeAttribute (XMLStreamWriterImpl.java:574)&lt;br/&gt;
app.services.external.experian.internal.test-data&amp;gt; &lt;/p&gt;

&lt;p&gt;(a) the xmlns and xmlns:xsi attributes have disappeared. Not the point of this issue but worth pointing out.&lt;br/&gt;
(b) &quot;xsi:schemaLocation&quot; has become :xsi/schemaLocation&lt;br/&gt;
(c) emitting a string blows up.&lt;/p&gt;</description>
                <environment>data.xml 0.0.7</environment>
            <key id="16126">DXML-15</key>
            <summary>data.xml can&apos;t parse own output if there&apos;s a colon in an attribute name</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ryansenior">Ryan Senior</assignee>
                                <reporter username="wolfson">ben wolfson</reporter>
                        <labels>
                    </labels>
                <created>Wed, 3 Apr 2013 20:00:02 -0500</created>
                <updated>Wed, 3 Apr 2013 20:00:02 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[DXML-16] Eliminate reflection in emit-cdata</title>
                <link>http://dev.clojure.org/jira/browse/DXML-16</link>
                <project id="10077" key="DXML">data.xml</project>
                        <description>&lt;p&gt;Solvable with a type hint on emit-cdata arg &apos;writer&apos;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16162">DXML-16</key>
            <summary>Eliminate reflection in emit-cdata</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ryansenior">Ryan Senior</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Thu, 25 Apr 2013 13:28:11 -0500</created>
                <updated>Thu, 25 Apr 2013 13:30:53 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31001" author="jafingerhut" created="Thu, 25 Apr 2013 13:30:53 -0500"  >&lt;p&gt;Patch dxml-16-eliminate-relfection-in-emit-cdata-patch-v1.txt dated Apr 25 2013 eliminates a couple of uses of reflection in function emit-cdata.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11969" name="dxml-16-eliminate-relfection-in-emit-cdata-patch-v1.txt" size="833" author="jafingerhut" created="Thu, 25 Apr 2013 13:30:53 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[JDATA-1] Handle primitive types and arrays</title>
                <link>http://dev.clojure.org/jira/browse/JDATA-1</link>
                <project id="10061" key="JDATA">java.data</project>
                        <description>&lt;p&gt;Right now, there is no special handling for methods with primitive or array parameters.&lt;br/&gt;
This results in errors, when trying to use bean classes, that have such methods, with to-java and from-java.&lt;/p&gt;

&lt;p&gt;The attached patch implements handling of primitives and arrays in the following manner:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;When the :default methods of from-java and to-java see an array type, they extend the multimethods for that array type.&lt;br/&gt;
  Issue: Is Iterable the right interface to extend the multimethod to? Sequential also came to mind, but Iterable was used elsewhere.&lt;/li&gt;
&lt;/ul&gt;


&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;Values that hit a numeric primitive slot (in to-java) are manually boxed, so they aren&apos;t passed as longs.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="14661">JDATA-1</key>
            <summary>Handle primitive types and arrays</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bendlas">Herwig Hochleitner</reporter>
                        <labels>
                    </labels>
                <created>Sat, 1 Oct 2011 12:05:11 -0500</created>
                <updated>Tue, 4 Oct 2011 07:35:09 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="26893" author="cosmin" created="Tue, 4 Oct 2011 07:35:09 -0500"  >&lt;p&gt;Committed in &lt;a href=&quot;https://github.com/clojure/java.data/commit/487db7420ae07ca4b527b38c39064d3b139ce78d&quot;&gt;https://github.com/clojure/java.data/commit/487db7420ae07ca4b527b38c39064d3b139ce78d&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10375" name="java.data-primitive-array-support.patch" size="10640" author="bendlas" created="Sat, 1 Oct 2011 12:05:12 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[JDATA-2] Eliminate many occurrences of Clojure reflection in java.data</title>
                <link>http://dev.clojure.org/jira/browse/JDATA-2</link>
                <project id="10061" key="JDATA">java.data</project>
                        <description>&lt;p&gt;There are many warnings the Clojure compiler gives about reflection in the java.data library.  Many can be eliminated with suitable type hints.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15794">JDATA-2</key>
            <summary>Eliminate many occurrences of Clojure reflection in java.data</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 28 Oct 2012 19:08:13 -0500</created>
                <updated>Sun, 28 Oct 2012 19:11:01 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29849" author="jafingerhut" created="Sun, 28 Oct 2012 19:11:01 -0500"  >&lt;p&gt;jdata-2-eliminate-reflection-v1.txt dated Oct 28 2012 eliminates many uses of Clojure reflection in java.data, but not all.  Only the ones that appeared to be straightforward to eliminate via adding a type hint or two were fixed.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11632" name="jdata-2-eliminate-reflection-v1.txt" size="4737" author="jafingerhut" created="Sun, 28 Oct 2012 19:11:01 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[JDBC-1] Provide option to return SQL generated / execution stats</title>
                <link>http://dev.clojure.org/jira/browse/JDBC-1</link>
                <project id="10021" key="JDBC">java.jdbc</project>
                        <description>&lt;p&gt;Shantanu: Provide a mechanism to show the SQL being executed (configurable, so that it can be turned off)&lt;/p&gt;

&lt;p&gt;Sean: Good idea. Even better, a way to access statistics about the prepared statement after execution - timing etc?&lt;/p&gt;

&lt;p&gt;Shantanu: Yes, that would be an add-on value to show how are the queries performing.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14416">JDBC-1</key>
            <summary>Provide option to return SQL generated / execution stats</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="seancorfield">Sean Corfield</assignee>
                                <reporter username="seancorfield">Sean Corfield</reporter>
                        <labels>
                    </labels>
                <created>Sun, 8 May 2011 21:12:52 -0500</created>
                <updated>Sun, 8 May 2011 21:12:52 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[JDBC-37] Provide support for alternate transaction strategies</title>
                <link>http://dev.clojure.org/jira/browse/JDBC-37</link>
                <project id="10021" key="JDBC">java.jdbc</project>
                        <description>&lt;p&gt;The current design of java.jdbc prevents its use as a participant in a distributed XA transaction, where transactional control is delegated to a TransactionManager. It only works with local transactions and absorbs all nested transactions into the outermost one. It&apos;d be nice to have a clean way to override this default behavior.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15608">JDBC-37</key>
            <summary>Provide support for alternate transaction strategies</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="seancorfield">Sean Corfield</assignee>
                                <reporter username="jcrossley3">Jim Crossley</reporter>
                        <labels>
                    </labels>
                <created>Tue, 31 Jul 2012 17:48:54 -0500</created>
                <updated>Fri, 3 May 2013 12:50:19 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29062" author="jcrossley3" created="Tue, 31 Jul 2012 17:49:18 -0500"  >&lt;p&gt;I&apos;ll try to work up a straw-man solution and submit a pull-request.&lt;/p&gt;</comment>
                    <comment id="29063" author="seancorfield" created="Tue, 31 Jul 2012 17:59:35 -0500"  >&lt;p&gt;Thanx Jim. I agree the current setup isn&apos;t ideal in that area. As for &quot;pull-request&quot;, I assume you mean a patch attached to this JIRA ticket (since Clojure and contrib projects cannot accept pull requests). Please also make sure you get a Contributor&apos;s Agreement on file per &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29064" author="jcrossley3" created="Tue, 31 Jul 2012 18:25:47 -0500"  >&lt;p&gt;Sure thing, Sean&lt;/p&gt;</comment>
                    <comment id="29078" author="jcrossley3" created="Thu, 2 Aug 2012 18:31:48 -0500"  >&lt;p&gt;Sean, here&apos;s a first whack introducing a new dynamic var for transaction strategy. &lt;/p&gt;

&lt;p&gt;I know the desire is for a new API with explicit parameter passing, and when that vision congeals, I&apos;m happy to help migrate, but I&apos;d like to always have the option of the dynamic binding as well.&lt;/p&gt;

&lt;p&gt;My thinking is that if a tx strategy function is passed as a parameter, it&apos;ll override whatever may be set in the dynamic var, but how it gets passed is still unclear to me. I considered adding an optional key to the db-spec, but wanted to run that by you first.&lt;/p&gt;

&lt;p&gt;The Agreement is in the mail. I appreciate your feedback.&lt;/p&gt;</comment>
                    <comment id="30900" author="seancorfield" created="Sun, 7 Apr 2013 03:46:49 -0500"  >&lt;p&gt;There have been a lot of code changes lately and this patch no longer applies cleanly. Can you submit a new patch against the latest master? Thanx!&lt;/p&gt;</comment>
                    <comment id="31025" author="jcrossley3" created="Tue, 30 Apr 2013 17:43:42 -0500"  >&lt;p&gt;Sean, I&apos;m not sure I&apos;m totally smitten with the new &quot;transaction?&quot; boolean parameter. At first glance, this seems an awkward way to define a transaction consisting of multiple statements. Can you provide an example usage with the new API of say, inserting, updating and deleting data within a single transaction? I&apos;m hoping an example will clear up my confusion and I can propose a way of parameterizing a particular strategy for executing any transaction.&lt;/p&gt;</comment>
                    <comment id="31027" author="seancorfield" created="Tue, 30 Apr 2013 17:47:22 -0500"  >&lt;p&gt;See &quot;Using Transactions&quot; here &lt;a href=&quot;https://github.com/clojure/java.jdbc/blob/master/doc/clojure/java/jdbc/UsingSQL.md&quot;&gt;https://github.com/clojure/java.jdbc/blob/master/doc/clojure/java/jdbc/UsingSQL.md&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="31028" author="jcrossley3" created="Tue, 30 Apr 2013 18:30:25 -0500"  >&lt;p&gt;Yes, I saw that, and it seemed to confirm that my original patch should work with minor tweaking. And then I was surprised to see the &quot;transactional?&quot; option in the source. I was curious how you expect it to be used.&lt;/p&gt;</comment>
                    <comment id="31030" author="seancorfield" created="Tue, 30 Apr 2013 18:58:52 -0500"  >&lt;p&gt;Folks have asked for the ability to run various functions without an implicit transaction inside them - in fact for some DBs, certain commands cannot be run inside a transaction which was a problem with the old API where you couldn&apos;t turn that off. It allows users to have more explicit control over transactions and it&apos;s also a convenient &quot;implementation artifact&quot; for nesting calls.&lt;/p&gt;

&lt;p&gt;So, bottom line: I expect very few users to actually use it explicitly, unless they specifically need to turn off the implicit transaction wrapping.&lt;/p&gt;

&lt;p&gt;And for most of the API that users will interact with, they don&apos;t even need to worry about it.&lt;/p&gt;

&lt;p&gt;Does that help?&lt;/p&gt;</comment>
                    <comment id="31031" author="seancorfield" created="Tue, 30 Apr 2013 19:04:17 -0500"  >&lt;p&gt;Addressing your question about your patch: Clojure/core specifically wanted java.jdbc to move away from dynamically bound variables, which the new API / implementation achieves (given that all the old API that depends on &lt;b&gt;dynamic-vars&lt;/b&gt; is deprecated now and will be completely removed before 1.0.0).&lt;/p&gt;

&lt;p&gt;If all you need is the ability to specify how the transaction function does its job, via a HOF, then I&apos;ll have a look at what that would take in the context of the new &apos;world&apos;...&lt;/p&gt;</comment>
                    <comment id="31034" author="jcrossley3" created="Tue, 30 Apr 2013 19:33:35 -0500"  >&lt;p&gt;Regarding dynamically bound variables, I think it&apos;s very common and accepted &amp;#8211; even canonical? &amp;#8211; to use them (or some ThreadLocal-like variant) to implement transactions. I would hate to make the api awkward just to avoid them.&lt;/p&gt;

&lt;p&gt;But to answer the core question, yes, I think it&apos;s important to provide an alternative to the assumptions encoded into db-transaction*, e.g. &quot;Any nested transactions are absorbed into the outermost transaction.&quot; I might prefer a strategy in which a nested transaction suspends the current one and creates another, assuming the driver supports it.&lt;/p&gt;

&lt;p&gt;But my primary reason for this, as you know, is to somehow inject a &quot;null strategy&quot; to support distributed transactions, delegating the commit/rollback choice to an external &quot;transaction manager&quot;.&lt;/p&gt;

&lt;p&gt;One question: what do you mean by &quot;implementation artifact&quot; for nesting calls?&lt;/p&gt;</comment>
                    <comment id="31037" author="jcrossley3" created="Wed, 1 May 2013 09:46:22 -0500"  >&lt;p&gt;Sean, how do you feel about turning the &lt;tt&gt;:transactional?&lt;/tt&gt; option to a function instead of a boolean? And that function represents the &lt;tt&gt;:tx-strategy&lt;/tt&gt; used, which could assume the value of a dynamically bound value &lt;tt&gt;&amp;#42;tx-strategy&amp;#42;&lt;/tt&gt; by default, and its value would be &lt;tt&gt;db-transaction*&lt;/tt&gt; by default. And folks could set it to nil to turn off transactions, i.e. &lt;tt&gt;:tx-strategy nil&lt;/tt&gt; or perhaps &lt;tt&gt;:tx-strategy :none&lt;/tt&gt; would equate to &lt;tt&gt;:transactional? false&lt;/tt&gt;. I think that may satisfy core&apos;s recommendation for dynamic variables not being the &lt;b&gt;only&lt;/b&gt; way to alter behavior. Make sense at all? &lt;/p&gt;</comment>
                    <comment id="31039" author="seancorfield" created="Wed, 1 May 2013 10:57:47 -0500"  >&lt;p&gt;I was looking at the code again last night and came to much the same conclusion! I&apos;ll take a run at that this weekend (but I&apos;m not adding a &lt;b&gt;dynamic&lt;/b&gt; variable - Clojure/core were very clear about their reasons for not wanting those in code except in extremely rare situations in code that is guaranteed to be single-threaded).&lt;/p&gt;</comment>
                    <comment id="31040" author="jcrossley3" created="Wed, 1 May 2013 11:22:36 -0500"  >&lt;p&gt;You&apos;re killing me! &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Without the dynamic var, I can&apos;t see any way to transparently allow the db code to participate in a distributed transaction. Can we at least agree that transactional code is guaranteed to be &lt;b&gt;effectively&lt;/b&gt; single-threaded? And by this I mean that a transaction must be associated with a single connection, so any thread using that connection must have exclusive access. Do you really want to force folks using distributed transactions to pass the tx strategy in with every call? I don&apos;t think adding the dynamic var and the option to override it violates the spirit of this guideline: &quot;If you present an interface that implicitly passes a parameter via dynamic binding (e.g. db in sql), also provide an identical interface but with the parameter passed explicitly.&quot;&lt;/p&gt;

&lt;p&gt;What was the specific feedback you received that contradicts that?&lt;/p&gt;</comment>
                    <comment id="31042" author="jcrossley3" created="Fri, 3 May 2013 06:44:33 -0500"  >&lt;p&gt;Sean, I came up with a different solution for using java.jdbc with an XA connection that obviates this issue. So even though I think it&apos;s useful to provide both a dynamic var and a function option as a means to override the logic of &lt;tt&gt;db-transaction*&lt;/tt&gt;, I no longer have a need for it.&lt;/p&gt;

&lt;p&gt;Keep up the good work on java.jdbc!&lt;/p&gt;</comment>
                    <comment id="31044" author="seancorfield" created="Fri, 3 May 2013 12:40:25 -0500"  >&lt;p&gt;I like problems that go away of their own accord but I still like the idea of making the transaction strategy a function so I&apos;ll look at that anyway as a possible (breaking) change for alpha2.&lt;/p&gt;</comment>
                    <comment id="31045" author="jcrossley3" created="Fri, 3 May 2013 12:50:19 -0500"  >&lt;p&gt;Something else you might consider: define a protocol function that encapsulates your &lt;tt&gt;commit/rollback/setAutoCommit&lt;/tt&gt; logic inside &lt;tt&gt;db-transaction*&lt;/tt&gt; and extend it to &lt;tt&gt;java.sql.Connection&lt;/tt&gt;. That way, folks could extend their more specific types, e.g. &lt;tt&gt;XAConnection&lt;/tt&gt;, to your protocol (and avoid making those calls that aren&apos;t allowed by XA). &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11408" name="jdbc-37.diff" size="2579" author="jcrossley3" created="Thu, 2 Aug 2012 18:31:48 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[JDBC-40] insert nulls using .setNull (e.g. for Teradata)</title>
                <link>http://dev.clojure.org/jira/browse/JDBC-40</link>
                <project id="10021" key="JDBC">java.jdbc</project>
                        <description>&lt;p&gt;Hi, I am using this nice package with a large (government) Teradata machine. I found that I can not insert nil values using &lt;tt&gt;insert-rows&lt;/tt&gt;: the Teradata JDBC driver tells me to use &lt;tt&gt;.setNull&lt;/tt&gt; or the form of &lt;tt&gt;.setObject&lt;/tt&gt; including an SQL type code.&lt;/p&gt;

&lt;p&gt;The following replacement definition of &lt;tt&gt;set-parameters&lt;/tt&gt; was the only change needed to get this to work.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn- set-parameters
  &lt;span class=&quot;code-quote&quot;&gt;&quot;Add the parameters to the given statement.&quot;&lt;/span&gt;
  [^PreparedStatement stmt params]
  (let [pmd (.getParameterMetaData stmt)]
    (dorun
     (map-indexed
      (fn [ix value]
        (let [typ (.getParameterType pmd (inc ix))]
          (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (nil? value)
            (.setNull stmt (inc ix) typ)
            (.setObject stmt (inc ix) value typ))))
      params))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I am not sure whether the use of &lt;tt&gt;.getParameterMetaData&lt;/tt&gt; is a generally appropriate because the docs &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/api/java/sql/ParameterMetaData.html&quot;&gt;http://docs.oracle.com/javase/7/docs/api/java/sql/ParameterMetaData.html&lt;/a&gt; say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For some queries and driver implementations, the data that would be returned by a ParameterMetaData object may not be available until the PreparedStatement has been executed.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Anyway it does work for Teradata. Maybe it could be an option?&lt;/p&gt;


&lt;p&gt;It just occurred to me that it is probably inefficient to retrieve the parameter metadata on every call to &lt;tt&gt;set-parameters&lt;/tt&gt;. It could be done in &lt;tt&gt;insert-rows&lt;/tt&gt; instead. On the other hand, I didn&apos;t actually notice any performance hit when inserting 40,000 rows.&lt;/p&gt;</description>
                <environment>Teradata 14</environment>
            <key id="15746">JDBC-40</key>
            <summary>insert nulls using .setNull (e.g. for Teradata)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="4" iconUrl="http://dev.clojure.org/jira/images/icons/status_reopened.gif">Reopened</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="seancorfield">Sean Corfield</assignee>
                                <reporter username="floybix">Felix Andrews</reporter>
                        <labels>
                    </labels>
                <created>Fri, 12 Oct 2012 06:07:37 -0500</created>
                <updated>Mon, 22 Apr 2013 04:26:18 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="30893" author="seancorfield" created="Sun, 7 Apr 2013 01:07:33 -0500"  >&lt;p&gt;This was a tricky one. Both .getParameterMetadataData and .getParameterType can throw exceptions. On MS SQL Server, if there is a syntax error in the SQL, the former throws an Exception. On MySQL, the latter throws an exception (every time as far as I can tell, even tho&apos; .getParameterMetaData succeeds). That introduces quite a performance penalty for MySQL (about 10% in my tests).&lt;/p&gt;

&lt;p&gt;However, if I treated MySQL as a special case and swallowed all exceptions and had a fallback to the original .setObject call, I could get everything to pass the test suite without a noticeable performance overhead (still measuring the latest MySQL performance as I write this).&lt;/p&gt;

&lt;p&gt;Although it will probably slow everyone down a little, having to make these calls, it should be more robust and may make the .setObject calls faster in some situations?&lt;/p&gt;</comment>
                    <comment id="30894" author="seancorfield" created="Sun, 7 Apr 2013 01:24:32 -0500"  >&lt;p&gt;Fixed in 0.3.0-SNAPSHOT. May need to be revisited for performance tweaks later. Uncomfortable with MySQL being a special case here... &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/sad.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;</comment>
                    <comment id="30965" author="seancorfield" created="Wed, 17 Apr 2013 18:48:14 -0500"  >&lt;p&gt;This fix breaks PostgreSQL and already has MySQL as an exception so I&apos;m going to roll it back and we&apos;ll have to find another way to support Teradata I&apos;m afraid!).&lt;/p&gt;</comment>
                    <comment id="30981" author="pmoriarty" created="Mon, 22 Apr 2013 04:26:18 -0500"  >&lt;p&gt;PostgreSQL also complains about use of setObject with a null object and no parameter type when using protocolVersion 3. &lt;/p&gt;

&lt;p&gt;Seems to work ok with protocolVersion 2 though.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[JDBC-48] Support stored procedures with CallableStatement</title>
                <link>http://dev.clojure.org/jira/browse/JDBC-48</link>
                <project id="10021" key="JDBC">java.jdbc</project>
                        <description>&lt;p&gt;JDBC&apos;s &lt;tt&gt;CallableStatement&lt;/tt&gt; provides support for calling stored procedures. More specifically, it allows you to register OUT parameters which will become the statements (possibly many) &lt;tt&gt;ResultSet&lt;/tt&gt; objects. A &lt;tt&gt;CallableStatement&lt;/tt&gt; &lt;em&gt;is a&lt;/em&gt; &lt;tt&gt;PreparedStatement&lt;/tt&gt;, so I am hoping there wont be too much involved with regard to executing them. The main difference is being able to register and consume OUT parameters.&lt;/p&gt;

&lt;p&gt;I&apos;ll be hacking on this, so patches are forthcoming. Any input is appreciated.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16090">JDBC-48</key>
            <summary>Support stored procedures with CallableStatement</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="seancorfield">Sean Corfield</assignee>
                                <reporter username="jeremyheiler">Jeremy Heiler</reporter>
                        <labels>
                    </labels>
                <created>Fri, 15 Mar 2013 13:50:23 -0500</created>
                <updated>Fri, 15 Mar 2013 22:51:30 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30767" author="seancorfield" created="Fri, 15 Mar 2013 22:51:30 -0500"  >&lt;p&gt;I&apos;ve never used stored procs (I don&apos;t like the complexity that I&apos;ve seen them add to version control, change management and deployment) so I&apos;m afraid I can&apos;t offer any input - but I really appreciate you taking this on! Thank you!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[JDBC-56] Problem with find-connection when using agents with c3p0 connection pool</title>
                <link>http://dev.clojure.org/jira/browse/JDBC-56</link>
                <project id="10021" key="JDBC">java.jdbc</project>
                        <description>&lt;p&gt;I use an agent to offload email processing and update a db on completion. If I use a c3p0 connection pool, I get an exception and a complaint that the connection isn&apos;t open (see stacktrace). The code works if I wrap the agent fn in a clojure.java.jdbc/with-connection and get a connection from the pool in the agent thread.&lt;/p&gt;

&lt;p&gt;The in jdbc.clj, the find-connection (db-find-connection in HEAD) checks for an existing connection and tries to use it without checking if it&apos;s open. This causes an exception with a c3p0 connection that was acquired in another thread.&lt;/p&gt;

&lt;p&gt;Here&apos;s the stacktrace I&apos;m seeing (note the &quot;You can&apos;t operate on a closed Connection!!!&quot;):&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;2013-05-16 10:32:22,208 [clojure-agent-send-off-pool-7] DEBUG com.mchange.v2.sql.SqlUtils - Converting Throwable to SQLException...
java.lang.NullPointerException
	at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:186)
	at clojure.java.jdbc$prepare_statement.doInvoke(jdbc.clj:450)
	at clojure.lang.RestFn.invoke(RestFn.java:425)
	at clojure.lang.AFn.applyToHelper(AFn.java:163)
	at clojure.lang.RestFn.applyTo(RestFn.java:132)
	at clojure.core$apply.invoke(core.clj:621)
	at clojure.java.jdbc$with_query_results_STAR_.invoke(jdbc.clj:646)
	at clj_record.core$find_by_sql$func__3362__auto____3378.invoke(core.clj:72)
	at clj_record.core$find_by_sql.invoke(core.clj:71)
	at clj_record.core$find_records.invoke(core.clj:85)
	at clj_record.core$find_record.invoke(core.clj:91)
	at neataudio.domain.interview_participant_relationship$find_record.invoke(interview_participant_relationship.clj:18)
	at neataudio.domain.interview_participant_relationship$update_email_status.invoke(interview_participant_relationship.clj:37)
	at neataudio.controllers.participant_controller$notify$fn__5113$fn__5114$func__3362__auto____5115$fn__5116.invoke(participant_controller.clj:104)
	at clojure.java.jdbc$transaction_STAR_$fn__3162.invoke(jdbc.clj:372)
	at clojure.java.jdbc$transaction_STAR_.invoke(jdbc.clj:371)
	at neataudio.controllers.participant_controller$notify$fn__5113$fn__5114$func__3362__auto____5115.invoke(participant_controller.clj:101)
	at neataudio.controllers.participant_controller$notify$fn__5113$fn__5114.invoke(participant_controller.clj:101)
	at neataudio.controllers.participant_controller$notify$fn__5113.invoke(participant_controller.clj:101)
	at clojure.lang.AFn.applyToHelper(AFn.java:185)
	at clojure.lang.AFn.applyTo(AFn.java:151)
	at clojure.core$apply.invoke(core.clj:623)
	at clojure.core$binding_conveyor_fn$fn__4115.doInvoke(core.clj:1848)
	at clojure.lang.RestFn.applyTo(RestFn.java:146)
	at clojure.lang.Agent$Action.doRun(Agent.java:114)
	at clojure.lang.Agent$Action.run(Agent.java:163)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
java.sql.SQLException: You can&apos;t operate on a closed Connection!!!
	at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
	at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
	at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:222)
	at clojure.java.jdbc$prepare_statement.doInvoke(jdbc.clj:450)
	at clojure.lang.RestFn.invoke(RestFn.java:425)
	at clojure.lang.AFn.applyToHelper(AFn.java:163)
	at clojure.lang.RestFn.applyTo(RestFn.java:132)
	at clojure.core$apply.invoke(core.clj:621)
	at clojure.java.jdbc$with_query_results_STAR_.invoke(jdbc.clj:646)
	at clj_record.core$find_by_sql$func__3362__auto____3378.invoke(core.clj:72)
	at clj_record.core$find_by_sql.invoke(core.clj:71)
	at clj_record.core$find_records.invoke(core.clj:85)
	at clj_record.core$find_record.invoke(core.clj:91)
	at neataudio.domain.interview_participant_relationship$find_record.invoke(interview_participant_relationship.clj:18)
	at neataudio.domain.interview_participant_relationship$update_email_status.invoke(interview_participant_relationship.clj:37)
	at neataudio.controllers.participant_controller$notify$fn__5113$fn__5114$func__3362__auto____5115$fn__5116.invoke(participant_controller.clj:104)
	at clojure.java.jdbc$transaction_STAR_$fn__3162.invoke(jdbc.clj:372)
	at clojure.java.jdbc$transaction_STAR_.invoke(jdbc.clj:371)
	at neataudio.controllers.participant_controller$notify$fn__5113$fn__5114$func__3362__auto____5115.invoke(participant_controller.clj:101)
	at neataudio.controllers.participant_controller$notify$fn__5113$fn__5114.invoke(participant_controller.clj:101)
	at neataudio.controllers.participant_controller$notify$fn__5113.invoke(participant_controller.clj:101)
	at clojure.lang.AFn.applyToHelper(AFn.java:185)
	at clojure.lang.AFn.applyTo(AFn.java:151)
	at clojure.core$apply.invoke(core.clj:623)
	at clojure.core$binding_conveyor_fn$fn__4115.doInvoke(core.clj:1848)
	at clojure.lang.RestFn.applyTo(RestFn.java:146)
	at clojure.lang.Agent$Action.doRun(Agent.java:114)
	at clojure.lang.Agent$Action.run(Agent.java:163)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.NullPointerException
	at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:186)
	... 28 more
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment>OS X 10.8.3&lt;br/&gt;
Java 1.6.0_45&lt;br/&gt;
Clojure 1.5&lt;br/&gt;
c3p0 0.9.1.2&lt;br/&gt;
java.jdbc 0.2.1 (the problem also seems to be there in HEAD at the time of logging this)</environment>
            <key id="16188">JDBC-56</key>
            <summary>Problem with find-connection when using agents with c3p0 connection pool</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="seancorfield">Sean Corfield</assignee>
                                <reporter username="edoloughlin">Ed O&apos;Loughlin</reporter>
                        <labels>
                    </labels>
                <created>Thu, 16 May 2013 04:43:42 -0500</created>
                <updated>Tue, 21 May 2013 12:36:16 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="31093" author="edoloughlin" created="Thu, 16 May 2013 04:50:41 -0500"  >&lt;p&gt;Apologies: this is a crappy bug report. I&apos;m under a bit of pressure at the moment so I can&apos;t make a test case.&lt;/p&gt;</comment>
                    <comment id="31128" author="seancorfield" created="Tue, 21 May 2013 12:36:16 -0500"  >&lt;p&gt;If you use the new API, you pass the db-spec into the functions and it will take care of getting the connection, using it, and closing it - and that will all happen on the same (agent) thread. I would not expect you to be able to get a connection in one thread and use it from another thread.&lt;/p&gt;

&lt;p&gt;When you get a chance, please post an example of both the working and non-working code, but my initial thinking is this isn&apos;t a bug, just an inherent limitation of working with connections across threads....?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[JMX-5] Timeout support</title>
                <link>http://dev.clojure.org/jira/browse/JMX-5</link>
                <project id="10060" key="JMX">java.jmx</project>
                        <description>&lt;p&gt;In the current java.jmx code there is no way to explicitly setup connection timeout when is used with-connection macro. This option can be quite useful, especially when client is trying to connect to unreliable jmx host or on location where client doesn&apos;t know jmx is enabled.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://weblogs.java.net/blog/emcmanus/archive/2007/05/making_a_jmx_co.html&quot;&gt;http://weblogs.java.net/blog/emcmanus/archive/2007/05/making_a_jmx_co.html&lt;/a&gt; can be used as starting point.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15268">JMX-5</key>
            <summary>Timeout support</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="sanel">Sanel Zukan</reporter>
                        <labels>
                    </labels>
                <created>Wed, 7 Mar 2012 05:29:59 -0600</created>
                <updated>Thu, 29 Mar 2012 11:34:17 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28045" author="nickmbailey" created="Thu, 29 Mar 2012 11:34:17 -0500"  >&lt;p&gt;So one way, you can set the socket timeout for jmx connections is by overriding the default rmi socket factory. See:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://stackoverflow.com/a/1822760/940653&quot;&gt;http://stackoverflow.com/a/1822760/940653&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That solution isn&apos;t perfect though. For one thing it overrides the default factory for any rmi operation, not necessarily just jmx. It also will only work if jmx is actually falling back to the default factory. For example, if you enable jmx over SSL then the default factory won&apos;t be used and that solution won&apos;t work. What you could do though is not tell jmx to use ssl, but override the default socket factory to return ssl sockets potentially. Once again though that will be the case for an rmi operations at that point.&lt;/p&gt;

&lt;p&gt;The solution in the post you mentioned is interesting. I kind of think adding a custom thread factory and executor service to the jmx library is a bit heavy handed. I might be more comfortable adding some documentation to the readme/wiki detailing the problem and the above possible solutions, so users can find them.&lt;/p&gt;

&lt;p&gt;Thoughts on that approach?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[JMX-8] Extend java.jmx to support exposing operations in created beans</title>
                <link>http://dev.clojure.org/jira/browse/JMX-8</link>
                <project id="10060" key="JMX">java.jmx</project>
                        <description>&lt;p&gt;The attached patch extends java.jmx to support creating beans that expose invokable operations.  Operation function definitions are supplied after the state-ref in the create-bean form in a syntax similar to protocol method implementations.  Type signatures, descriptions, and impact constants are harvested from metadata on the operation definitions.  Nontrivial argument type binders (rest arguments, destructuring, etc) in operations are not supported.&lt;/p&gt;

&lt;p&gt;I am sure this patch could be improved in many ways; the operation method parser in create-bean feels unnecessarily hairy and yet limited at the same time, because my macro-fu is not yet strong.  The documentation examples are not yet updated, though I am happy to do this if the feature is reviewed and accepted.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15661">JMX-8</key>
            <summary>Extend java.jmx to support exposing operations in created beans</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="bccjeris">Chris Jeris</reporter>
                        <labels>
                    </labels>
                <created>Fri, 31 Aug 2012 15:43:36 -0500</created>
                <updated>Fri, 31 Aug 2012 15:44:51 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11465" name="JMX-8.patch" size="7401" author="bccjeris" created="Fri, 31 Aug 2012 15:44:51 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[JMX-9] Eliminate several uses of reflection in java.jmx</title>
                <link>http://dev.clojure.org/jira/browse/JMX-9</link>
                <project id="10060" key="JMX">java.jmx</project>
                        <description>&lt;p&gt;There are a fair number of occurrences of reflection in java.jmx that can be eliminated with the addition of suitable type hints.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15799">JMX-9</key>
            <summary>Eliminate several uses of reflection in java.jmx</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Sun, 28 Oct 2012 23:49:16 -0500</created>
                <updated>Sun, 16 Dec 2012 17:07:31 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29863" author="jafingerhut" created="Sun, 28 Oct 2012 23:56:08 -0500"  >&lt;p&gt;jmx-9-eliminate-reflection-v1.txt dated Oct 28 2012 eliminates most reflection warnings from java.jmx.&lt;/p&gt;

&lt;p&gt;I would recommend that you check the type hints carefully before applying this, in case I messed some of them up.  I am not familiar with javax.management library usage.  I simply did a lot of looking at method signatures for methods used in the code in the Java library docs.&lt;/p&gt;

&lt;p&gt;In particular, I wasn&apos;t sure whether &lt;b&gt;connection&lt;/b&gt; should be a javax.management.MBeanServer or MBeanServerConnection.  MBeanServerConnection is good enough for most of the code, but for the .registerMBean method invocation in register-mbean it needs to be a MBeanServer to avoid reflection.  Perhaps it should be MBeanServer everywhere?  My main question is whether that would limit the code&apos;s generality too much.&lt;/p&gt;</comment>
                    <comment id="30243" author="nickmbailey" created="Sun, 16 Dec 2012 17:07:19 -0600"  >&lt;p&gt;Well it shouldn&apos;t be MBeanServer everywhere. When using the with-connection macro &lt;b&gt;connection&lt;/b&gt; is a RemoteMBeanServerConnection and &apos;registerMBean&apos; isn&apos;t a defined method. &lt;/p&gt;

&lt;p&gt;I&apos;m thinking perhaps we just change register-mbean to always get the local JMX server rather than using the &lt;b&gt;connection&lt;/b&gt; binding. You can&apos;t register mbeans with a remote jmx server.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11637" name="jmx-9-eliminate-reflection-v1.txt" size="4132" author="jafingerhut" created="Sun, 28 Oct 2012 23:56:08 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[JVMTA-1] ns form should be first in files where it appears</title>
                <link>http://dev.clojure.org/jira/browse/JVMTA-1</link>
                <project id="10275" key="JVMTA">tools.analyzer</project>
                        <description>&lt;p&gt;Some tools for analyzing Clojure files expect an ns form to appear first, if one appears in the file at all, e.g. some functions in tools.namespace.  A couple of files in jvm.tools.analyzer have it second, after (set! *warn-on-reflection true), or false.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16113">JVMTA-1</key>
            <summary>ns form should be first in files where it appears</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ambrosebs">Ambrose Bonnaire-Sergeant</assignee>
                                <reporter username="jafingerhut">Andy Fingerhut</reporter>
                        <labels>
                    </labels>
                <created>Wed, 27 Mar 2013 03:13:31 -0500</created>
                <updated>Wed, 27 Mar 2013 03:15:57 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30825" author="jafingerhut" created="Wed, 27 Mar 2013 03:15:57 -0500"  >&lt;p&gt;Patch jvmta-1-patch-v1.txt simply moves the (set! *warn-on-reflection true) (or false) forms after the ns forms in two files.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11929" name="jvmta-1-patch-v1.txt" size="1797" author="jafingerhut" created="Wed, 27 Mar 2013 03:15:57 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-26] Generate a better error when adding facts for arities that do not exist</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-26</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description></description>
                <environment></environment>
            <key id="15146">LOGIC-26</key>
            <summary>Generate a better error when adding facts for arities that do not exist</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 23 Jan 2012 22:33:16 -0600</created>
                <updated>Sun, 17 Mar 2013 18:54:33 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-28] defrel cannot be called inside function</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-28</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description></description>
                <environment></environment>
            <key id="15224">LOGIC-28</key>
            <summary>defrel cannot be called inside function</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Wed, 15 Feb 2012 15:20:17 -0600</created>
                <updated>Sun, 17 Mar 2013 18:55:08 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27779" author="dnolen" created="Mon, 20 Feb 2012 14:15:21 -0600"  >&lt;p&gt;Can you reformat the patch w/ git so it has the proper attribution information? Thanks!&lt;/p&gt;</comment>
                    <comment id="28490" author="jasonjckn" created="Sun, 13 May 2012 10:06:40 -0500"  >&lt;p&gt;New patch with attribution info. Sorry about super long turn around time, in the future I should be much faster. &lt;/p&gt;</comment>
                    <comment id="29504" author="martintrojer" created="Thu, 20 Sep 2012 03:32:40 -0500"  >&lt;p&gt;This patch solved the exact same problem for me aswell.&lt;/p&gt;

&lt;p&gt;Cheers...&lt;/p&gt;</comment>
                    <comment id="29505" author="dnolen" created="Thu, 20 Sep 2012 10:57:07 -0500"  >&lt;p&gt;I&apos;ve yet to hear a good rationale for this patch. defrel has the same semantics as def and should only exist at the top level. If someone puts more though into what defining a rel dynamically should look like I will consider it.&lt;/p&gt;</comment>
                    <comment id="29507" author="jasonjckn" created="Thu, 20 Sep 2012 14:02:02 -0500"  >&lt;p&gt;I only implemented this so I could delete relation state. There&apos;s probably a better way to do this though. &lt;/p&gt;</comment>
                    <comment id="29508" author="martintrojer" created="Fri, 21 Sep 2012 02:47:35 -0500"  >&lt;p&gt;Indeed, a make-rel function would be optimal, then you can def it (or store it somewhere else) at your leisure.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11212" name="0001-allow-defrel-to-be-called-from-within-a-function-if-.patch" size="2575" author="jasonjckn" created="Sun, 13 May 2012 10:06:40 -0500" />
                    <attachment id="10912" name="patch-defrel" size="1521" author="jasonjckn" created="Wed, 15 Feb 2012 15:20:17 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-30] Add persistent memory tables</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-30</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Rels currently complect identity and value, and are not first class. This enhancement provides a single-arity relation as a first class persistent value. Equality (and hash code) is defined in terms of the ITableRel protocol, leaving the door open for alternative implementations.&lt;/p&gt;

&lt;p&gt;The implementation provide in the attached patch is a hair faster than Rels in the single index case. The query strategy used in the multiple index case may or may not be faster than the one employed by Rels depending on the data. This could easily be made configurable, if desired.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15272">LOGIC-30</key>
            <summary>Add persistent memory tables</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="qbg">Brian Goslinga</reporter>
                        <labels>
                    </labels>
                <created>Fri, 9 Mar 2012 19:58:23 -0600</created>
                <updated>Sun, 17 Mar 2013 18:53:34 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30785" author="dnolen" created="Sun, 17 Mar 2013 18:53:34 -0500"  >&lt;p&gt;ThreatGRID has a really nice simple implementation going here that they are already using in production - &lt;a href=&quot;http://github.com/threatgrid/pldb&quot;&gt;http://github.com/threatgrid/pldb&lt;/a&gt;. We should probably just integrate it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10990" name="0001-Added-persistent-memory-tables.patch" size="9337" author="qbg" created="Fri, 9 Mar 2012 19:58:23 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[LOGIC-35] Core.logic equivalent of multimethods</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-35</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;I need to define predicates to which I can later (and from other namespaces) attach further clauses (so not just facts). I couldn&apos;t find any such functionality in the source. Due to the extensive use of macros, hacking such a system onto core.logic from the outside is extremely difficult, if not impossible (to me at least).&lt;/p&gt;

&lt;p&gt;I&apos;d love to implement this myself too, if given an OK and rough direction.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15314">LOGIC-35</key>
            <summary>Core.logic equivalent of multimethods</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="werg">Gabriel Pickard</reporter>
                        <labels>
                        <label>enhancement</label>
                    </labels>
                <created>Mon, 2 Apr 2012 19:32:56 -0500</created>
                <updated>Fri, 28 Dec 2012 00:48:09 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28068" author="werg" created="Tue, 3 Apr 2012 18:27:45 -0500"  >&lt;p&gt;I actually did manage to tack on a prototype that covers the basic behavior I would like to see: &lt;a href=&quot;https://github.com/werg/herpderp/blob/master/src/herpderp/multo.clj&quot;&gt;https://github.com/werg/herpderp/blob/master/src/herpderp/multo.clj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I use a set stored in a ref in the defne&apos;s metadata to manage dynamic changes to the clauses. Upon changing that set using defclause I use eval to re-define the var using defne.&lt;/p&gt;

&lt;p&gt;This might not be nice, but allows me to continue developing features against it.&lt;/p&gt;</comment>
                    <comment id="30334" author="dnolen" created="Fri, 28 Dec 2012 00:48:02 -0600"  >&lt;p&gt;I don&apos;t think the current implementation can really support this and I don&apos;t think it&apos;s wise to try to hack around the current implementation. I&apos;d be willing to consider a comprehensive solution if someone is willing to do the legwork.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-38] Logic Threading Macro</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-38</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;This macro was somewhat useful when I was implementing static analysis for a compiler with core.logic.&lt;/p&gt;

&lt;p&gt;(defmacro ==&amp;gt;&amp;gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;expr-in &amp;amp; rel-forms&amp;#93;&lt;/span&gt;&lt;br/&gt;
  &quot;Thread the expr-in through rel-forms then unify with last rel-forms&lt;br/&gt;
   (the &apos;out expression&apos;).&lt;/p&gt;

&lt;p&gt;   Example:&lt;br/&gt;
     (==&amp;gt;&amp;gt; [&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;] (firsto) (firsto) x))&lt;br/&gt;
     ;; &apos;x&apos; will become bound to value 1&lt;/p&gt;

&lt;p&gt;   This macro expands to:&lt;br/&gt;
   (fresh &lt;span class=&quot;error&quot;&gt;&amp;#91;_A _B&amp;#93;&lt;/span&gt;&lt;br/&gt;
     (firsto [&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;]  _A)&lt;br/&gt;
     (firsto _A     _B)&lt;br/&gt;
     (==     _B     q))&lt;/p&gt;

&lt;p&gt;   If you imagine that the &apos;return value&apos; of firsto is its last parameter,&lt;br/&gt;
   then it works just like clojure.core/-&amp;gt; as return value of each form is&lt;br/&gt;
   first argument of the following form.&quot;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15441">LOGIC-38</key>
            <summary>Logic Threading Macro</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Sun, 13 May 2012 11:07:24 -0500</created>
                <updated>Sun, 13 May 2012 11:19:08 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28492" author="jasonjckn" created="Sun, 13 May 2012 11:08:53 -0500"  >&lt;p&gt;There might be a better name, not sure. &lt;/p&gt;</comment>
                    <comment id="28493" author="jasonjckn" created="Sun, 13 May 2012 11:18:09 -0500"  >&lt;p&gt;renamed ==&amp;gt;&amp;gt; to ==-&amp;gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11214" name="0001-added-logic-threading-macro.patch" size="3805" author="jasonjckn" created="Sun, 13 May 2012 11:18:09 -0500" />
                    <attachment id="11213" name="0001-added-logic-threading-macro.patch" size="3800" author="jasonjckn" created="Sun, 13 May 2012 11:07:24 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-43] LVar should print readably</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-43</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Currently LVar objects print the same as symbols; they should either print as an unreadable form, or in a way that the reader can read them back in and get an LVar. Attached patch causes them to be read in as LVars.&lt;/p&gt;

&lt;p&gt;However, (read-string (pr-str lv)) does not compare as equal to lv, because the implementation of .equals relies on their string :name objects being identical? - which they will not be, if one LVar was created by the lvar function, which uses str, and the other created by read-string, which uses String/intern.&lt;/p&gt;

&lt;p&gt;It seems plausible to say that LVars can&apos;t be compared for equality after sending them through strings, but that&apos;s awkward and unpleasant. We could instead define LVars to compare their names with = rather than with identical?, but David expressed concern about the performance implications of that change.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15571">LOGIC-43</key>
            <summary>LVar should print readably</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="amalloy">Alan Malloy</reporter>
                        <labels>
                    </labels>
                <created>Thu, 5 Jul 2012 20:20:40 -0500</created>
                <updated>Thu, 5 Jul 2012 20:20:40 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                    <attachment id="11369" name="0001-Make-lvar-print-readably.patch" size="992" author="amalloy" created="Thu, 5 Jul 2012 20:20:40 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[LOGIC-44] ex* could expand macros in patterns</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-44</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;So, tagged data structures are probably interesting in a relational context. Say you have a relation with some default logic about dogs:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defna friendlyo [Dog-Or-Breed]
    ([:Spot] succeed)
    ([:Spike] fail)
    ([Other-Dog] (fresh [Breed] (dog-breed Other-Dog Breed) (friendlyo Breed)))
    ([(breed :miniature-dachshund)] fail)
    ([(breed :golden-retriever)] succeed)
    ;. . .)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Assume there&apos;s a (defmacro breed &lt;span class=&quot;error&quot;&gt;&amp;#91;t&amp;#93;&lt;/span&gt; `&lt;span class=&quot;error&quot;&gt;&amp;#91;:breed ~t&amp;#93;&lt;/span&gt;).&lt;/p&gt;

&lt;p&gt;That&apos;s nicer than having to drop &lt;span class=&quot;error&quot;&gt;&amp;#91;:breed :golden-retriever&amp;#93;&lt;/span&gt; in there or whatever, since it&apos;s compile-time-checkable, less error-prone, reduces duplication, etc.&lt;/p&gt;

&lt;p&gt;This little patch makes ex* expand macros in patterns so it doesn&apos;t treat e.g. (breed :golden-retriever) as introducing a new LVar called &quot;breed&quot;. Test also provided.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15582">LOGIC-44</key>
            <summary>ex* could expand macros in patterns</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="joeosborn">Joe Osborn</reporter>
                        <labels>
                        <label>enhancement</label>
                        <label>patch</label>
                        <label>test</label>
                    </labels>
                <created>Thu, 19 Jul 2012 16:32:01 -0500</created>
                <updated>Sun, 17 Mar 2013 19:05:17 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28996" author="dnolen" created="Thu, 19 Jul 2012 16:41:30 -0500"  >&lt;p&gt;I&apos;m surprised that this doesn&apos;t already work. We have support for unifying expressions in the pattern already. Look at line 1230 in tests.clj in the master branch.&lt;/p&gt;

&lt;p&gt;So this should just work, no need to explicitly support macros as far as I can tell. If it&apos;s not working, then there&apos;s a bug.&lt;/p&gt;</comment>
                    <comment id="28997" author="joeosborn" created="Thu, 19 Jul 2012 17:18:48 -0500"  >&lt;p&gt;At least on 0.7.5, matching against a macro gives a runtime error:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.ClassCastException: clojure.core.logic.LVar cannot be &lt;span class=&quot;code-keyword&quot;&gt;cast&lt;/span&gt; to clojure.lang.IFn
	at rl.core$glyph_$fn__123$fn__144$fn__165$fn__166$_inc__167$fn__168.invoke(core.clj:61)
	at clojure.core.logic.Substitutions.bind(logic.clj:211)
	at rl.core$glyph_$fn__123$fn__144$fn__165$fn__166$_inc__167.invoke(core.clj:58)
	at clojure.core.logic$fn__1056$_inc__1057.invoke(logic.clj:1160)
	at clojure.core.logic$fn__1056$_inc__1057.invoke(logic.clj:1160)
	at clojure.core.logic$fn__898$_inc__899.invoke(logic.clj:823)
	at clojure.core.logic$fn__890$fn__891.invoke(logic.clj:828)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Using a fn instead of a macro gives the same:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.ClassCastException: clojure.core.logic.LVar cannot be &lt;span class=&quot;code-keyword&quot;&gt;cast&lt;/span&gt; to clojure.lang.IFn
	at rl.core$drawable_$fn__235$fn__248$fn__249$_inc__250$fn__251.invoke(core.clj:67)
	at clojure.core.logic.Substitutions.bind(logic.clj:211)
	at rl.core$drawable_$fn__235$fn__248$fn__249$_inc__250.invoke(core.clj:65)
	at clojure.core.logic$fn__1056$_inc__1057.invoke(logic.clj:1160)
	at clojure.core.logic$fn__894$_inc__895.invoke(logic.clj:826)
	at clojure.core.logic$fn__1056$_inc__1057.invoke(logic.clj:1160)
	at clojure.core.logic$fn__898$_inc__899.invoke(logic.clj:823)
	at clojure.core.logic$fn__898$_inc__899.invoke(logic.clj:823)
	at clojure.core.logic$fn__898$_inc__899.invoke(logic.clj:823)
	at clojure.core.logic$fn__890$fn__891.invoke(logic.clj:828)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Here&apos;s (glyph-) for reference (don&apos;t mind all the extra [], I have a weird key/value thing because of some conveniences for maintaining fact identity in a temporal database):&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defna glyph- [Key Val]
	([[Thing] [Glyph]] (thing- [Thing]) (on-fire_ *turn* [Thing]) (== Glyph \&#948;))
	([[Thing] [Glyph]] (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (glyph- [Type] [Glyph])))
	([[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :player)] [Glyph]] (== Glyph \@))
	([[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)] [Glyph]] (== Glyph \D))
	([[Type] [Glyph]] (== Glyph \?)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and type-enum as a macro:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defmacro type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; [v] `[:&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :type ~v])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and as a fn:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; [v] [:&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :type ~v])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I&apos;ll mess around and see if my example works in HEAD.&lt;/p&gt;</comment>
                    <comment id="28998" author="joeosborn" created="Thu, 19 Jul 2012 17:37:36 -0500"  >&lt;p&gt;Same exception with this test case in HEAD (sorry for all the facts):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defrel thing- [Thing])
(defrel type- [Thing] [Type])
(fact thing- [0])
(fact thing- [1])
(fact thing- [2])
(fact type- [0] [:player])
(fact type- [1] [:dragon])
(fact type- [2] [:pig])
(defn type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; [t] [:type t])
(defna drawable- [Key]
  ([[Thing]] (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (drawable- [Type])))
  ([[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :player)]] succeed)
  ([[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)]] succeed))

(deftest &lt;span class=&quot;code-keyword&quot;&gt;do&lt;/span&gt;-fns-work
	(is (= (run* [q] (drawable- [q])) &apos;(0 1))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now that I look at it, I may be expecting a wrong-format return value, but the point is that I don&apos;t even get that far.&lt;/p&gt;

&lt;p&gt;Using the REPL, I checked out how (defna drawable- . . .) expands (tidied up slightly):&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def drawable- (clojure.core/fn ([Key] 
  (clojure.core.logic/conda 
	  ((clojure.core.logic/fresh [Thing] (clojure.core.logic/== [Thing] Key) (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (drawable- [Type])))) 
		((clojure.core.logic/fresh [type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt;] 
		  (clojure.core.logic/== [(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :player)] Key) succeed))
		((clojure.core.logic/fresh [type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt;] 
		  (clojure.core.logic/== [(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)] Key) succeed))))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note the (clojure.core.logic/fresh &lt;span class=&quot;error&quot;&gt;&amp;#91;type-enum&amp;#93;&lt;/span&gt; . . .) forms, which are exactly what I would not want to see in this case.&lt;/p&gt;

&lt;p&gt;I&apos;m not really sure why this doesn&apos;t work here yet works for the matche test case.&lt;/p&gt;</comment>
                    <comment id="28999" author="dnolen" created="Thu, 19 Jul 2012 17:47:23 -0500"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This pattern make it seem like you want to match:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;[[:type :dragon]]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note extra level of brackets here. Is this the case?&lt;/p&gt;

&lt;p&gt;Even so I agree that the expansion doesn&apos;t look quite right. We should never descend into a seq form like that.&lt;/p&gt;</comment>
                    <comment id="29001" author="joeosborn" created="Thu, 19 Jul 2012 17:57:03 -0500"  >&lt;p&gt;Yes, that&apos;s exactly the desired outcome in this case--a tagged value in my naive interpretation. Is the reason it fails whereas the test on :1230 doesn&apos;t the fact that it&apos;s producing a vector and not a list? Changing the fn to return a list instead of a vector didn&apos;t seem to help.&lt;/p&gt;

&lt;p&gt;My patch, fwiw, doesn&apos;t exhibit that behavior (at least for macros, haven&apos;t tested it with fns).&lt;/p&gt;</comment>
                    <comment id="29002" author="dnolen" created="Thu, 19 Jul 2012 21:11:27 -0500"  >&lt;p&gt;What I mean is don&apos;t you want the following instead?&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defna drawable- [Key]
  ([[Thing]] (thing- [Thing]) (fresh [Type] (type- [Thing] [Type]) (drawable- [Type])))
  ([(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :player)] succeed)
  ([(type-&lt;span class=&quot;code-keyword&quot;&gt;enum&lt;/span&gt; :dragon)] succeed))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Note that I removed a layer of square brackets.&lt;/p&gt;</comment>
                    <comment id="29005" author="joeosborn" created="Fri, 20 Jul 2012 10:28:39 -0500"  >&lt;p&gt;Nope! I actually want both. I&apos;m doing some temporal logic stuff and I wanted some conveniences for &quot;updating&quot; a fluent, so I wanted to distinguish between the &quot;key part&quot; and the &quot;value part&quot; of the arguments. It looks silly for facts with no &quot;value part&quot;, but it lets me write procedures and fns something like this:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defrel heldo Time Fluent)
(defrel &#172;heldo Time Fluent)
(declare fluent-obtainedo) ; most recent &apos;held&apos; not terminated by a &apos;&#172;held&apos;, or fail
(defn alter-fluent [Time Rel Key NewVal]
  ;todo: error check, ensure old != &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;, old obtains, &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; does not obtain
  (doseq [old-val (run* [old-val] (fluent-obtainedo Time [Rel Key old-val]))]
    (fact &#172;heldo Time [Rel Key old-val]))
  (fact heldo Time [Rel Key NewVal]))
. . .
(fact heldo 0 [&apos;pos [0] [0 0]])
. . .
(alter-fluent 1 &apos;pos [0] [1 1])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And I write all the non-temporal fluents that way too for consistency and to help prevent mistakes.&lt;/p&gt;</comment>
                    <comment id="29009" author="dnolen" created="Fri, 20 Jul 2012 14:58:13 -0500"  >&lt;p&gt;I&apos;ll try to give a closer look at this issue over the weekend.&lt;/p&gt;</comment>
                    <comment id="30787" author="dnolen" created="Sun, 17 Mar 2013 19:05:17 -0500"  >&lt;p&gt;We&apos;re thinking about a more general solution here: &lt;a href=&quot;http://github.com/clojure/core.logic/wiki/Better-syntax-support&quot;&gt;http://github.com/clojure/core.logic/wiki/Better-syntax-support&lt;/a&gt;&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11389" name="exstar-macros.patch" size="1931" author="joeosborn" created="Thu, 19 Jul 2012 16:32:01 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[LOGIC-47] is macro needs to be improved</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-47</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;the is macro should work like the following:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(is x (- (+ a b) c))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All locals appearing in the right expression should be walked.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15655">LOGIC-47</key>
            <summary>is macro needs to be improved</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 30 Aug 2012 11:33:22 -0500</created>
                <updated>Thu, 30 Aug 2012 11:33:22 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-48] fd/in should provide a default domain if none specified</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-48</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;This domain should probably be (interval 0 Long/MAX_VALUE). In order for this to work this means we should probably accept passing in the vars to assigned domains as a seqable. It would be easy to accept the current way and this new way since if the first arg is not a symbol then the new behavior is being requested.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(fd/in [x y])
(fd/in [x y z] (interval 0 10))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15656">LOGIC-48</key>
            <summary>fd/in should provide a default domain if none specified</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 30 Aug 2012 11:35:50 -0500</created>
                <updated>Fri, 17 May 2013 00:57:46 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-68] add Prolog meta-logical predicates bagof, setof, findall</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-68</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;This can be done by annotating logic variables and embedding a run within a run by passing in the current substitution, running on it, and extracting out the reified values and unifying it back into the current substitution.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15826">LOGIC-68</key>
            <summary>add Prolog meta-logical predicates bagof, setof, findall</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 16 Nov 2012 13:20:26 -0600</created>
                <updated>Wed, 13 Feb 2013 13:50:21 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29956" author="abrooks" created="Fri, 16 Nov 2012 13:23:57 -0600"  >&lt;p&gt;I&apos;m working on understanding the answers given for this StackOverflow question:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://stackoverflow.com/questions/7647758/prolog-findall-implementation&quot;&gt;http://stackoverflow.com/questions/7647758/prolog-findall-implementation&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="29957" author="abrooks" created="Fri, 16 Nov 2012 22:02:47 -0600"  >&lt;p&gt;For discussion &#8212; Initial working patch supporting nested version of &apos;run-a/&apos;run-a*. Binding symbols must match existing lvars with which vectors of all returned values will be unified.&lt;/p&gt;</comment>
                    <comment id="29958" author="abrooks" created="Sat, 17 Nov 2012 16:07:32 -0600"  >&lt;p&gt;Should we provide wrappers that emulate each of bagof, setof and findall?&lt;/p&gt;

&lt;p&gt;I&apos;m still not sold on the current names run-a/run-a*. &quot;a&quot; is really an internal implementation detail. Expect a revised patch with better names when I think of them (any ideas?).&lt;/p&gt;</comment>
                    <comment id="29960" author="dnolen" created="Sat, 17 Nov 2012 20:32:53 -0600"  >&lt;p&gt;Yes please. Yeah I don&apos;t think the names of run-a/etc are critical - implementation details for now until we really understand the implications and it gets some use.&lt;/p&gt;</comment>
                    <comment id="30001" author="abrooks" created="Wed, 21 Nov 2012 10:51:16 -0600"  >&lt;p&gt;I&apos;m considering simply making &lt;tt&gt;run&lt;/tt&gt;/&lt;tt&gt;run*&lt;/tt&gt; conditionalized on the first argument, using the nesting form if we are being called with a substitution map as the first argument.&lt;/p&gt;

&lt;p&gt;My current understanding of &lt;tt&gt;bagof&lt;/tt&gt; and &lt;tt&gt;findall&lt;/tt&gt; makes me think they&apos;re not worth implementing beyond the nesting &lt;tt&gt;run&lt;/tt&gt; functionality.&lt;/p&gt;

&lt;p&gt;I&apos;m still thinking about &lt;tt&gt;setof&lt;/tt&gt; which is quite useful and will want help from the infrastructure to be fully efficient.&lt;/p&gt;

&lt;p&gt;I&apos;ll submit a new patch after Thanksgiving.&lt;/p&gt;</comment>
                    <comment id="30002" author="dnolen" created="Wed, 21 Nov 2012 10:57:21 -0600"  >&lt;p&gt;Excellent, thanks much.&lt;/p&gt;</comment>
                    <comment id="30175" author="abrooks" created="Thu, 6 Dec 2012 00:30:03 -0600"  >&lt;p&gt;I have not forgotten, I&apos;ve just gotten swamped.&lt;/p&gt;

&lt;p&gt;There&apos;s a small chance I&apos;ll get to this before Christmas, otherwise, it&apos;s after the new year.&lt;/p&gt;</comment>
                    <comment id="30547" author="abrooks" created="Mon, 4 Feb 2013 17:50:05 -0600"  >&lt;p&gt;After a car accident, travel to London and Morocco, getting caught up at work and getting caught up on the apparently very busy stream of core.logic activity (great work!), I&apos;m back on this.&lt;/p&gt;

&lt;p&gt;I found some bugs in my implementation after porting the patch forwards and realized these issues highlighted my sloppy understanding of some of the semantics I had created.&lt;/p&gt;

&lt;p&gt;I&apos;m fairly convinced now that we don&apos;t want to name this after &lt;tt&gt;run&lt;/tt&gt; or &lt;tt&gt;run*&lt;/tt&gt;. It&apos;s too much of a strain to try to make it mean the same thing in a nested context.&lt;/p&gt;

&lt;p&gt;The current mechanism is still not quite a match for &lt;tt&gt;findall&lt;/tt&gt;/&lt;tt&gt;bagof&lt;/tt&gt;/&lt;tt&gt;setof&lt;/tt&gt;, however, so I&apos;m seeing what a good fit would be. I&apos;ll post meaningful thoughts for review as I have them.&lt;/p&gt;</comment>
                    <comment id="30589" author="dnolen" created="Wed, 13 Feb 2013 13:50:21 -0600"  >&lt;p&gt;Glad to hear you&apos;re OK! No worries, will take a patch whenever you get around to one.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11683" name="0001-LOGIC-68-Add-run-a-run-a-logic-functions-to-support-.patch" size="1720" author="abrooks" created="Fri, 16 Nov 2012 22:02:47 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-70] support for defaults in the simple unifier</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-70</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;There should be a way to specify a logic var with default values. If it is not unified with something it should unify with the default provided value.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15836">LOGIC-70</key>
            <summary>support for defaults in the simple unifier</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 19 Nov 2012 15:19:38 -0600</created>
                <updated>Sun, 17 Mar 2013 18:49:10 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-80] add fne, anonymous version of defne</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-80</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description></description>
                <environment></environment>
            <key id="15901">LOGIC-80</key>
            <summary>add fne, anonymous version of defne</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Tue, 18 Dec 2012 10:13:04 -0600</created>
                <updated>Fri, 17 May 2013 00:53:27 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="31038" author="stanislas" created="Wed, 1 May 2013 10:24:07 -0500"  >&lt;p&gt;The macros &apos;fnm&apos; (and fn&lt;span class=&quot;error&quot;&gt;&amp;#91;eau&amp;#93;&lt;/span&gt;) use the optional argument :tabled after the argument list. Is it ok? &lt;/p&gt;</comment>
                    <comment id="31056" author="dnolen" created="Sun, 5 May 2013 19:39:07 -0500"  >&lt;p&gt;tabling passed as an option is OK with me.&lt;/p&gt;

&lt;p&gt;Also could we get tests? Thanks much!&lt;/p&gt;</comment>
                    <comment id="31057" author="stanislas" created="Mon, 6 May 2013 03:48:23 -0500"  >&lt;p&gt;I&apos;ve used the existing pm tests to test the fne macro. you find it in the logic-80-2.patch. Is it what you had in mind?&lt;/p&gt;

&lt;p&gt;It is not clear how I can test for tabled anonymous functions as the :tabled metadata is of the defn&lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; vars.&lt;br/&gt;
Possibilities would be:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;add meta-data to the function produced by the macro &apos;tabled&apos;;&lt;/li&gt;
	&lt;li&gt;let the function produced by tabled implement some interface/protocol.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;what do you think?&lt;/p&gt;</comment>
                    <comment id="31071" author="dnolen" created="Tue, 7 May 2013 22:31:39 -0500"  >&lt;p&gt;This looks good. Two things:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;squashed patch&lt;/li&gt;
	&lt;li&gt;tabled anonymous goal patch&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    <comment id="31074" author="stanislas" created="Thu, 9 May 2013 01:38:44 -0500"  >&lt;p&gt;we&apos;re almost there &lt;img class=&quot;emoticon&quot; src=&quot;http://dev.clojure.org/jira/images/icons/emoticons/smile.gif&quot; height=&quot;20&quot; width=&quot;20&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;

&lt;p&gt;i do not understand what you mean. you prefer a separate patch for tabled anonymous goal?&lt;/p&gt;</comment>
                    <comment id="31075" author="dnolen" created="Thu, 9 May 2013 08:11:59 -0500"  >&lt;p&gt;Sorry typo, I meant a test for the tabled anonymous goal. Thanks!&lt;/p&gt;</comment>
                    <comment id="31077" author="stanislas" created="Fri, 10 May 2013 10:51:01 -0500"  >&lt;p&gt;thanks, i&apos;ll do it asap.&lt;/p&gt;</comment>
                    <comment id="31089" author="stanislas" created="Tue, 14 May 2013 09:50:07 -0500"  >&lt;p&gt;Squashed Patch with tests for the fn&lt;span class=&quot;error&quot;&gt;&amp;#91;e&amp;#93;&lt;/span&gt; macros, normal and tabled.&lt;/p&gt;</comment>
                    <comment id="31090" author="stanislas" created="Tue, 14 May 2013 09:51:37 -0500"  >&lt;p&gt;so i finally got some time to look at it again. the patch is squashed and contains a test for the tabled anonymous goals; it just tests whether the macro code actually works.&lt;/p&gt;</comment>
                    <comment id="31095" author="dnolen" created="Fri, 17 May 2013 00:53:27 -0500"  >&lt;p&gt;Thanks will take a look!&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11991" name="logic-80-3.patch" size="6391" author="stanislas" created="Tue, 14 May 2013 09:50:07 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-86] make `defc` more useful</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-86</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;As we start adding more constraints it&apos;s becoming clear we really want to have to specify less boiler plate. Instead of:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn -treec
  ([x fc cform] (-treec x fc cform nil))
  ([x fc cform _id]
     (reify
       clojure.lang.IFn
       (invoke [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; a]
         (let [x (walk a x)]
           (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (tree-term? x)
             ((composeg
               (constrain-tree x
                 (fn [t a] ((treec t fc cform) a)))
               (remcg &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;)) a)
             ((composeg
               (fc x)
               (remcg &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;)) a))))
       IConstraintId
       (id [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;] _id)
       IWithConstraintId
       (with-id [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; _id]
         (-treec x fc cform _id))
       IConstraintOp
       (rator [_] `treec)
       (rands [_] [x])
       IReifiableConstraint
       (reifyc [_ v r a]
         (let [x (walk* r x)]
           `(treec ~x ~cform)))
       IRelevant
       (-relevant? [_ a] &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)
       IRunnable
       (runnable? [_ a]
         (not (lvar? (walk a x))))
       IConstraintWatchedStores
       (watched-stores [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;] #{::subst}))))

(defn treec [x fc cform]
  (cgoal (-treec x fc cform)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We should be able to write just:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defc treec [x fc cform]
  clojure.lang.IFn
  (invoke [&lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; a]
    (let [x (walk a x)]
      (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (tree-term? x)
        ((composeg
          (constrain-tree x
            (fn [t a] ((treec t fc cform) a)))
          (remcg &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;)) a)
        ((composeg
          (fc x)
          (remcg &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt;)) a))))
  IConstraintRands
  (rands [_] [x])
  IReifiableConstraint
  (reifyc [_ v r a]
    (let [x (walk* r x)]
      `(treec ~x ~cform))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;`defc` should intelligently fill in the details.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15926">LOGIC-86</key>
            <summary>make `defc` more useful</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 26 Dec 2012 17:27:08 -0600</created>
                <updated>Sun, 17 Mar 2013 18:30:51 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-87] Decomplect the narrowing of the constraint space from the search order</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-87</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;From a high-level point of view a constraint solver takes a constraint space, generates a tree of narrowings of the space and runs some search algorithm on the tree. Core.logic complects the generation of this tree and the search algorithm by representing the search space as a lazy stream of the leaves of the tree. By explicitly representing the search tree we get new search algorithms, optional fair conjunction and parallel search via fork-join. &lt;/p&gt;

&lt;p&gt;More detail: &lt;a href=&quot;http://scattered-thoughts.net/blog/2012/12/19/search-trees-and-core-dot-logic/&quot;&gt;http://scattered-thoughts.net/blog/2012/12/19/search-trees-and-core-dot-logic/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github fork: &lt;a href=&quot;https://github.com/clojure/core.logic/pull/13&quot;&gt;https://github.com/clojure/core.logic/pull/13&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Attached is a cleaned-up patch against d68e3400472c5f745e4c13d64433459e11ba4871&lt;/p&gt;</description>
                <environment></environment>
            <key id="15928">LOGIC-87</key>
            <summary>Decomplect the narrowing of the constraint space from the search order</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jamii">Jamie Brandon</reporter>
                        <labels>
                    </labels>
                <created>Thu, 27 Dec 2012 15:01:29 -0600</created>
                <updated>Fri, 28 Dec 2012 00:41:40 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30332" author="dnolen" created="Fri, 28 Dec 2012 00:41:40 -0600"  >&lt;p&gt;Thanks! Will try to find some time this weekend to do a thorough review.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11781" name="flexible_search.patch" size="14247" author="jamii" created="Thu, 27 Dec 2012 15:01:29 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[LOGIC-89] Allow application again in pattern matches</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-89</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Perhaps we can support simple function application in the following manner.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defne substo [e &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; a out]
  ([&apos;(&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; ~a) _ _ &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;])
  ([&apos;(&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; ~y) _ _ &apos;(&lt;span class=&quot;code-keyword&quot;&gt;var&lt;/span&gt; ~y)] (nom/hash a y))
  ([&apos;(app ~rator ~rand) _ _ &apos;(app ~rator-res ~rand-res)]
     (substo rator &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; a rator-res)
     (substo rand &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; a rand-res))
  ([&apos;(lam ~(nom/tie c body)) _ _ &apos;(lam ~(nom/tie c body-res))]
     (nom/hash c a) (nom/hash c &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt;)
     (substo body &lt;span class=&quot;code-keyword&quot;&gt;new&lt;/span&gt; a body-res)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If we have a seq in an unquote then we know we have an application. All function symbols are left alone, all arguments are considered to be fresh vars or locals.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15934">LOGIC-89</key>
            <summary>Allow application again in pattern matches</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                        <label>0.8.0</label>
                    </labels>
                <created>Tue, 1 Jan 2013 12:30:19 -0600</created>
                <updated>Mon, 7 Jan 2013 11:24:04 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-96] relevant-var? logic incorrectly discards a vars constraint set</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-96</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Need a patch and a test showing that the vars constraint set is preserved.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15942">LOGIC-96</key>
            <summary>relevant-var? logic incorrectly discards a vars constraint set</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 4 Jan 2013 11:01:00 -0600</created>
                <updated>Sun, 17 Mar 2013 19:10:57 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30404" author="dnolen" created="Mon, 7 Jan 2013 19:04:59 -0600"  >&lt;p&gt;Currently dead code so this is not a blocker.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-99] StackOverflow for large `appendo`</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-99</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(def l (range 0 2000))
(run* [q] (appendo l l q))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Stacktrace&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (def l (range 0 2000))
#&apos;user/l
user=&amp;gt; (run* [q] (appendo l l q))
StackOverflowError   clojure.core.logic.LVar (logic.clj:1307)
user=&amp;gt; (pst)
StackOverflowError 
    clojure.core.logic.LVar (logic.clj:1307)
    clojure.lang.KeywordLookupSite$1.get (KeywordLookupSite.java:45)
    clojure.core.logic.LVar (logic.clj:1325)
    clojure.lang.Util.equiv (Util.java:32)
    clojure.lang.PersistentHashMap$BitmapIndexedNode.find (PersistentHashMap.java:601)

    clojure.lang.PersistentHashMap$ArrayNode.find (PersistentHashMap.java:370)
    clojure.lang.PersistentHashMap$ArrayNode.find (PersistentHashMap.java:370)
    clojure.lang.PersistentHashMap.entryAt (PersistentHashMap.java:133)
    clojure.lang.RT.find (RT.java:720)
    clojure.core/find (core.clj:1432)
    clojure.core.logic.Substitutions (logic.clj:1134)
    clojure.core.logic/walk*/fn--2847 (logic.clj:1005)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15947">LOGIC-99</key>
            <summary>StackOverflow for large `appendo`</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="3" iconUrl="http://dev.clojure.org/jira/images/icons/status_inprogress.gif">In Progress</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 5 Jan 2013 14:43:28 -0600</created>
                <updated>Mon, 7 Jan 2013 21:13:52 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30379" author="dnolen" created="Sat, 5 Jan 2013 14:44:47 -0600"  >&lt;p&gt;I cannot recreate on my machine but should try a large N &amp;amp; wait and see.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-114] stack overflow with conda/u</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-114</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(ns test
  (:refer-clojure :exclude [==])
  (:require
   [clojure.core.logic :refer :all]))
 
(defn foo [in out]
  (matcha 
   [in out]
   ([(&apos;and a b . ()) (&apos;and x y . ())] (foo a x) (foo b y))
   ([a (&apos;bar (&apos;baz a . ()) . ())])))
 
;; I get a stack overflow with the following, but &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; I remove one conjunct, then it will run.
 
(run 1 [q] (foo
            &apos;(and p
                  (and p
                       (and p
                            (and p
                                 (and p
                                      (and p
                                           (and p
                                                (and p
                                                     (and p
                                                          (and p
                                                               (and p p)))))))))))
            q))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16012">LOGIC-114</key>
            <summary>stack overflow with conda/u</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="austinhaas">Austin Haas</reporter>
                        <labels>
                    </labels>
                <created>Thu, 14 Feb 2013 13:15:03 -0600</created>
                <updated>Sun, 17 Mar 2013 21:02:42 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30601" author="dnolen" created="Thu, 14 Feb 2013 13:22:04 -0600"  >&lt;p&gt;It looks this issue still exists even if you swap the matcha with matche&lt;/p&gt;</comment>
                    <comment id="30607" author="austinhaas" created="Thu, 14 Feb 2013 20:06:52 -0600"  >&lt;p&gt;I think the overflow is occurring during reification.&lt;/p&gt;

&lt;p&gt;I was getting this error when returning a result from run, but now that I&apos;m using the same value as the input to another goal there is no overflow.&lt;/p&gt;

&lt;p&gt;If you replace q in the foo call with a fresh variable, it will not overflow.&lt;/p&gt;</comment>
                    <comment id="30791" author="dnolen" created="Sun, 17 Mar 2013 19:30:32 -0500"  >&lt;p&gt;This works for me on master. Can you give me more specifics about your setup so I can try to recreate? I&apos;m on OS X 10.8 running JDK 7 64bit.&lt;/p&gt;</comment>
                    <comment id="30793" author="austinhaas" created="Sun, 17 Mar 2013 20:50:19 -0500"  >&lt;p&gt;I don&apos;t see the issue anymore, but I believe I was using Java 1.6 when I reported it and now I am using:&lt;/p&gt;


&lt;p&gt;$ java -version&lt;br/&gt;
java version &quot;1.7.0_15&quot;&lt;br/&gt;
Java(TM) SE Runtime Environment (build 1.7.0_15-b03)&lt;br/&gt;
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)&lt;/p&gt;</comment>
                    <comment id="30794" author="dnolen" created="Sun, 17 Mar 2013 21:02:42 -0500"  >&lt;p&gt;OK, thanks for the quick response, I&apos;ll double check how things look under 1.6.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-117] one-shot constraints with multiple rands may run more than once</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-117</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Here are two examples using fixc:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(run* [q]
  (fresh [x y]
    (fixc [x y]
      (fn [[x y] a _] (!= x 1))
      (fn [[x y] a] (= (walk a x) (walk a y)))
      &apos;...)
    (== x y)))

(run* [q]
  (fresh [x y c d]
    (fixc [x y]
      (fn [[x y] a _] (!= x y))
      (fn [[x y] a] (or (not (lvar? (walk a x))) (not (lvar? (walk a y)))))
      &apos;...)
    (== [x y] [[c] [d]])))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The constraint != is reified twice in each example, showing that the fixc constraint indeed ran twice.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16078">LOGIC-117</key>
            <summary>one-shot constraints with multiple rands may run more than once</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="namin">Nada Amin</reporter>
                        <labels>
                    </labels>
                <created>Mon, 11 Mar 2013 15:10:20 -0500</created>
                <updated>Tue, 19 Mar 2013 01:36:02 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30790" author="dnolen" created="Sun, 17 Mar 2013 19:27:57 -0500"  >&lt;p&gt;For the first example I see the following as a result on master:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;((_0 :- (!= (_1 1))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Is this what you&apos;re seeing? As x isn&apos;t even part of the answer I wonder if we should show these constraints?&lt;/p&gt;</comment>
                    <comment id="30796" author="namin" created="Tue, 19 Mar 2013 01:36:02 -0500"  >&lt;p&gt;I changed the reifier by setifying the set of constraints, hence you get only one result now. So my illustration is now out-of-date but the problem remains. It&apos;s a separate issue to filter out irrelevant constraints, and I agree it should be done (I try to do it for the nominal constraints).&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-118] prep does not make lvar of ?x if ?x is in a vector</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-118</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;In latest master:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user=&amp;gt; (use &apos;clojure.core.logic.unifier)
user=&amp;gt; (prep &apos;([?x]))
([&amp;lt;lvar:?x&amp;gt;]) ;; ok. ?x turned into an lvar
user=&amp;gt; (prep &apos;([?x] . ?xs))
([?x] . &amp;lt;lvar:?xs&amp;gt;) ;; fail. ?x is not an lvar&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The last expression should return (&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;lt;lvar:?x&amp;gt;&amp;#93;&lt;/span&gt; . &amp;lt;lvar:?xs&amp;gt;)&lt;/p&gt;</description>
                <environment></environment>
            <key id="16079">LOGIC-118</key>
            <summary>prep does not make lvar of ?x if ?x is in a vector</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jonase">Jonas Enlund</reporter>
                        <labels>
                    </labels>
                <created>Mon, 11 Mar 2013 15:50:38 -0500</created>
                <updated>Sun, 17 Mar 2013 11:42:39 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30738" author="jonase" created="Tue, 12 Mar 2013 00:11:42 -0500"  >&lt;p&gt;patch &lt;a href=&quot;http://dev.clojure.org/jira/browse/LOGIC-118&quot; title=&quot;prep does not make lvar of ?x if ?x is in a vector&quot;&gt;LOGIC-118&lt;/a&gt;.diff fixes this issue. I&apos;m not sure if it does so correctly.&lt;/p&gt;</comment>
                    <comment id="30779" author="dnolen" created="Sun, 17 Mar 2013 11:42:39 -0500"  >&lt;p&gt;It&apos;s seem to me that this should be corrected in prep*? It looks like the issue is that prep* only handles seqs and not collections in general.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11908" name="LOGIC-118.diff" size="935" author="jonase" created="Tue, 12 Mar 2013 00:10:31 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-119] tie disequality</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-119</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(deftest test-tie-disequality
  (is (= (run* [q]
           (nom/fresh [a b]
             (!= (nom/tie a a) &apos;hello)))
        &apos;(_0)))
  (is (= (run* [q]
           (nom/fresh [a b]
             (!= (nom/tie a a) (nom/tie b b))))
        ())))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Currently, the first causes an error, because IPersistentMap (which gets called because Tie is a record!) assumes that the the other term is also a record (that seems like a bug). If we revert the commit which makes Tie a record, this works.&lt;/p&gt;

&lt;p&gt;The other one succeeds, when it should fail. This is regardless of whether Tie is a record or not. &lt;/p&gt;</description>
                <environment></environment>
            <key id="16081">LOGIC-119</key>
            <summary>tie disequality</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="namin">Nada Amin</reporter>
                        <labels>
                    </labels>
                <created>Tue, 12 Mar 2013 05:37:38 -0500</created>
                <updated>Tue, 12 Mar 2013 05:52:35 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30739" author="namin" created="Tue, 12 Mar 2013 05:52:35 -0500"  >&lt;p&gt;quick fix in &lt;a href=&quot;https://github.com/clojure/core.logic/commit/8af0f45f8d1cb515ec7a00e5acd751562a31bb37&quot;&gt;https://github.com/clojure/core.logic/commit/8af0f45f8d1cb515ec7a00e5acd751562a31bb37&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;for actually doing != modulo alpha equivalence requires the opposite of nom/hash.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-123] Allow unification with sequential in both directions</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-123</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Currently I can&apos;t find a way to enable a custom data type to do unification with sequential objects in both direction. You can use IUnifyTerms to make it work in one direction, but it isn&apos;t possible to make it work in the other direction (i.e. when the sequential object is first).&lt;/p&gt;

&lt;p&gt;The problem seemes to be in the following code:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn unify-with-sequential* [u v s]
  (cond
    (sequential? v)
    (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (and (counted? u) (counted? v)
          (not= (count u) (count v)))
      nil
      (loop [u u v v s s]
        (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (seq u)
          (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (seq v)
            (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt;-let [s (unify s (first u) (first v))]
              (recur (next u) (next v) s)
              nil)
            nil)
          (&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (seq v) nil s))))
    
    (lcons? v) (unify-terms v u s)
    :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; nil))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the final nil could be replaced with a call to a protocol (IUnifyTermsReversed ???IUnifyWithSequential ???) then I believe it would make this extensible.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16104">LOGIC-123</key>
            <summary>Allow unification with sequential in both directions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="mikera">Mike Anderson</reporter>
                        <labels>
                    </labels>
                <created>Sat, 23 Mar 2013 21:10:33 -0500</created>
                <updated>Tue, 26 Mar 2013 01:07:40 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30807" author="dnolen" created="Sat, 23 Mar 2013 21:53:56 -0500"  >&lt;p&gt;I&apos;m assume it&apos;s undesirable for your datatype to implement ISequential?&lt;/p&gt;</comment>
                    <comment id="30808" author="mikera" created="Sat, 23 Mar 2013 23:06:43 -0500"  >&lt;p&gt;It&apos;s undesirable because an expression can be a leaf node as well:&lt;/p&gt;

&lt;p&gt;(+ 3 X) ;; OK as sequential&lt;br/&gt;
7       ;; definitely not sequential!&lt;/p&gt;

&lt;p&gt;Hence making Expression implement ISequential would be problematic and break all kinds of contracts.....&lt;/p&gt;

&lt;p&gt;Trying to unify the leaf node with a sequential object should fail of course, but that&apos;s logic I need to implement myself (I think??)&lt;/p&gt;</comment>
                    <comment id="30809" author="dnolen" created="Sun, 24 Mar 2013 12:11:50 -0500"  >&lt;p&gt;I&apos;m still not following as there&apos;s some context about your use case that I&apos;m missing. Do you have a concrete core.logic example that you should think should work?&lt;/p&gt;</comment>
                    <comment id="30811" author="mikera" created="Mon, 25 Mar 2013 02:21:15 -0500"  >&lt;p&gt;Sure, here is my test case:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [ex1 (ex [+ 1 X])]  ;; an expression containing (+ 1 X) 
  (is (= [(ex X)] (run* [q] (fresh [op p] (== [op p q] ex1)))))  ;; fails
  (is (= [(ex X)] (run* [q] (fresh [op p] (== ex1 [op p q])))))  ;; OK
)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The first case fails (because of unify-with-sequential* returning nil as above). The second case is OK because it goes through my own implementation of IUnifyTerms. I may be wrong, but I don&apos;t think I can make it work without a change in core.logic itself.&lt;/p&gt;</comment>
                    <comment id="30815" author="dnolen" created="Mon, 25 Mar 2013 07:39:21 -0500"  >&lt;p&gt;We used to support unifying in both directions but it made for a large number of protocols that had to be implemented. Recently I&apos;ve been thinking it may be useful to provide coercion protocols, something like ICoerceToSequential. &lt;/p&gt;</comment>
                    <comment id="30820" author="mikera" created="Mon, 25 Mar 2013 19:37:36 -0500"  >&lt;p&gt;I think it is necessary to be able to support unifying in both directions somehow if custom data structures are ever going to be first-class citizens in core.logic?&lt;/p&gt;

&lt;p&gt;I see how you could achieve this with ICoerceToSequential however so that might be a good solution. We do something a bit similar in core.matrix (to handle coercions between different back-end matrix implementations).&lt;/p&gt;</comment>
                    <comment id="30821" author="dnolen" created="Mon, 25 Mar 2013 19:44:48 -0500"  >&lt;p&gt;custom data structures are already first class. Whether we should allow overloading unification of custom types with core Clojure interfaces/protocols/types is another matter entirely. &lt;/p&gt;

&lt;p&gt;And sorry for the confusion. It&apos;s not clear to me why you want sequential to work, from your examples it appears that you have a proper expression type, what advantage is there for you to unify with sequential?&lt;/p&gt;</comment>
                    <comment id="30823" author="mikera" created="Tue, 26 Mar 2013 01:07:40 -0500"  >&lt;p&gt;I think it may be important if you have &quot;sequence-like&quot; data structures that aren&apos;t precisely sequential? but are conceptually equivalent to sequences. My custom Expression type is one example, and for interop reasons things like java.util.ArrayList spring to mind.&lt;/p&gt;

&lt;p&gt;As it happens, I&apos;ve switched back to using regular lists for the moment so the issue isn&apos;t a blocker for me. But it may still be worth thinking about.&lt;/p&gt;

&lt;p&gt;Couple of advantages of doing this kind of unification would appear to be:&lt;br/&gt;
a) notational - you can use regular Clojure lists and vectors for unifying with something sequence-like&lt;br/&gt;
b) efficiency - avoid constructing a new custom object when it isn&apos;t needed (though the cost is probably too trivial to bother about in most cases....)&lt;/p&gt;

&lt;p&gt;Of course, you may decide it is simpler and purer to avoid these complications, which is fine. But it seems a shame to have all the nice extensible protocols, and not quite be able to fully extend the functionality to custom types....&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-128] add mod/rem/abs/min/max</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-128</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;SWI-Prolog&apos;s CLP(FD) module has this functionality &lt;a href=&quot;http://www.swi-prolog.org/man/clpfd.html&quot;&gt;http://www.swi-prolog.org/man/clpfd.html&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="16122">LOGIC-128</key>
            <summary>add mod/rem/abs/min/max</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Tue, 2 Apr 2013 12:48:15 -0500</created>
                <updated>Tue, 2 Apr 2013 12:48:15 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-129] matcha/matchu are not faithful to the semantics of conda/condu</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-129</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;The semantics of conda and condu give special importance to the head of each clause, but the pattern matching macros in core.logic that are built on top of them merge the body into the head. That means that every expression in a body position is considered when deciding which line is chosen, rather than just the expression in the head position. This is because the entire clause is wrapped in a fresh expression to bind the implicitly specified lvars that appear in the pattern.&lt;/p&gt;

&lt;p&gt;To illustrate:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(matcha [&apos;a]
    [[&apos;a] u#]
    [[&apos;a] s#])

;; expands to:

(conda
  [(fresh [] (== &apos;a &apos;a) u#)]
  [(fresh [] (== &apos;a &apos;a) s#)])

;; which has a different meaning than:

(conda
  [(== &apos;a &apos;a) u#]
  [(== &apos;a &apos;a) s#])&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ideally, we could devise a new system to marry the semantics of conda with pattern matching. At the very least, I think the offending macros should carry a warning in their docstring, stating this semantic difference.&lt;/p&gt;

&lt;p&gt;I suspect this would also cause the &quot;Third Commandment&quot; warning to apply to the entire line, rather than just the head/question, but I have not investigated that issue.&lt;/p&gt;

&lt;p&gt;Here&apos;s an example that demonstrates the difference in meaning:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;;; This does not succeed, because we commit to the first line, 
;; since the question succeeds, but then fail in the body.

(run* [q]
  (conda
   [(== &apos;a &apos;a) u#]
   [(== &apos;a &apos;a) s#]))

;; =&amp;gt; ()

;; This succeeds, because the whole line is used to determine which line to commit to, 
;; rather than just the pattern matching clause at the head. So when the first line fails,
;; the second line is tried.

(run* [q]
  (matcha [&apos;a]
   [[&apos;a] u#]
   [[&apos;a] s#]))

;; =&amp;gt; (_0)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16127">LOGIC-129</key>
            <summary>matcha/matchu are not faithful to the semantics of conda/condu</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="austinhaas">Austin Haas</reporter>
                        <labels>
                    </labels>
                <created>Thu, 4 Apr 2013 14:30:40 -0500</created>
                <updated>Thu, 4 Apr 2013 17:16:54 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="30869" author="austinhaas" created="Thu, 4 Apr 2013 14:35:44 -0500"  >&lt;p&gt;For reference:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;&lt;a name=&quot;TheThirdCommandment&quot;&gt;&lt;/a&gt;The Third Commandment&lt;/h3&gt;

&lt;p&gt;If prior to determining the question of a conda (or condu) line a variable is fresh, it must remain fresh in the question of that line.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;From The Reasoned Schemer.&lt;/p&gt;</comment>
                    <comment id="30870" author="dnolen" created="Thu, 4 Apr 2013 17:16:54 -0500"  >&lt;p&gt;Good catch I need to think about this one.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-130] StackOverFlowError when walking over set</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-130</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;Walking a Clojure set seems to cause a StackOverFlowError:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(run* [?s] (== ?s #{1 2 3}))

(let [s #{1 2 3}] (run* [?s] (== ?s s)))

(run* [?convertedseq ?seq] 
  (== ?seq #{1 2 3})
  (project [?seq]
    (== ?convertedseq (vector ?seq))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;StackOverflowError 
	clojure.core.logic/walk*/fn--2722 (logic.clj:216)
	clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
	clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
	clojure.core.logic/walk* (logic.clj:214)
	clojure.core.logic/walk*/fn--2722 (logic.clj:218)
	clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
	clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
	clojure.core.logic/walk* (logic.clj:214)
	clojure.core.logic/walk*/fn--2722 (logic.clj:218)
	clojure.core.logic/eval2927/fn--2928 (logic.clj:956)
	clojure.core.logic.protocols/eval1478/fn--1479/G--1469--1486 (protocols.clj:55)
	clojure.core.logic/walk* (logic.clj:214)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment>core.logic 0.8.3 &lt;br/&gt;
Clojure 1.5</environment>
            <key id="16146">LOGIC-130</key>
            <summary>StackOverFlowError when walking over set</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="cderoove">Coen De Roover</reporter>
                        <labels>
                    </labels>
                <created>Tue, 16 Apr 2013 16:55:33 -0500</created>
                <updated>Tue, 16 Apr 2013 17:28:27 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30964" author="dnolen" created="Tue, 16 Apr 2013 17:28:27 -0500"  >&lt;p&gt;core.logic no longer supports unification of sets so you&apos;re just seeing an error as result of a complete lack of support. I&apos;m not against supporting basic unification of completely grounded sets, as then we only need to test for equality, but I&apos;m inclined to make the system throw if any logic vars appear in the sets.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-133] Add label goal</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-133</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;This goal should enumerate any fd vars found in a fresh/ground var bound to a sequence. This would avoid some unintuitive behavior that came up on the mailing list:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defne weighted-listo [l w]
  ([() _] (fd/== w 0))
  ([[h . t] _]
    (fresh [n]
      (fd/in n (fd/interval 0 java.lang.&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;/MAX_VALUE))
      (fd/in h (fd/interval 1 java.lang.&lt;span class=&quot;code-object&quot;&gt;Integer&lt;/span&gt;/MAX_VALUE))
      (fd/+ h n w)
      (weighted-listo t n))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16171">LOGIC-133</key>
            <summary>Add label goal</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 29 Apr 2013 14:21:18 -0500</created>
                <updated>Mon, 29 Apr 2013 14:21:18 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-136] Make benchmark suite as easy to run as `lein test`</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-136</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;`lein benchmark` (or some other non-lein-based incantation) prints a report listing the name of each benchmark and its timing. &lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;$ lein benchmark
membero 2839
zebra 152738
$ lein benchmark comparison-report {:baseline &lt;span class=&quot;code-quote&quot;&gt;&quot;benchmark-5.9.2013-1&quot;&lt;/span&gt;
                                    :runs 5
                                    :diffs-only &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
                                    :threshold 25} ; only consider different &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; the delta is &amp;gt; 25 ms.                                     
membero +68ms
zebra -122ms
$ lein benchmark {:pretty &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;}
Thu May  9 11:21:41 PDT 2013

Linux mars 2.6.32-5-amd64 #1 SMP Fri Feb 15 15:39:52 UTC 2013 x86_64 GNU/Linux

java version &lt;span class=&quot;code-quote&quot;&gt;&quot;1.7.0_21&quot;&lt;/span&gt;
Java(TM) SE &lt;span class=&quot;code-object&quot;&gt;Runtime&lt;/span&gt; Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

membero     2839 ms
zebra     152738 ms&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I haven&apos;t looked for any Clojure benchmarking libs, but ideally this would be a trivial script that automates the repetitive manual task of running benchmark tests. Unlike the test suite, we aren&apos;t looking for binary success or failure. Every run will generate unique results, so the script should accommodate a fuzzier comparison. &lt;/p&gt;

&lt;p&gt;A &quot;pretty&quot; output that includes system info would be great for bug reports. &lt;/p&gt;</description>
                <environment></environment>
            <key id="16181">LOGIC-136</key>
            <summary>Make benchmark suite as easy to run as `lein test`</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="austinhaas">Austin Haas</reporter>
                        <labels>
                    </labels>
                <created>Thu, 9 May 2013 13:27:58 -0500</created>
                <updated>Thu, 9 May 2013 13:44:02 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31076" author="dnolen" created="Thu, 9 May 2013 13:44:02 -0500"  >&lt;p&gt;Sounds like an excellent enhancement to me. Patch welcome for this.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[LOGIC-137] OOM when setting (interval 1 2) for 20 logic vars</title>
                <link>http://dev.clojure.org/jira/browse/LOGIC-137</link>
                <project id="10020" key="LOGIC">core.logic</project>
                        <description>&lt;p&gt;The following two programs (presumably equivalent) both give me OOM (heap space):&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [vs (repeatedly 20 l/lvar)]
  (l/run 1 [q]
     (l/== q vs)
     (l/everyg (fn [v] (fd/in v (fd/interval 1 2))) vs)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(l/run 1 [q]
         (l/fresh [x1 x2 x3 x4 x5 x6 x7 x8 x9
                   x10 x11 x12 x13 x14 x15
                   x16 x17 x18 x19 x20]
                  (l/== q [x1 x2 x3 x4 x5 x6 x7 x8 x9
                           x10 x11 x12 x13 x14 x15
                           x16 x17 x18 x19 x20])
                  (fd/in x1 x2 x3 x4 x5 x6 x7 x8 x9
                         x10 x11 x12 x13 x14 x15
                         x16 x17 x18 x19 x20
                         (fd/interval 1 2))))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I assume the expected value is something like (&lt;span class=&quot;error&quot;&gt;&amp;#91;1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1&amp;#93;&lt;/span&gt;).&lt;/p&gt;</description>
                <environment>Clojure 1.5.1, both 0.8.3 and 0.8.4--994a7a3&lt;br/&gt;
&lt;br/&gt;
Running on a 1GB VM.</environment>
            <key id="16184">LOGIC-137</key>
            <summary>OOM when setting (interval 1 2) for 20 logic vars</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="gfredericks">Gary Fredericks</reporter>
                        <labels>
                    </labels>
                <created>Sat, 11 May 2013 18:40:43 -0500</created>
                <updated>Sat, 11 May 2013 18:40:43 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-2] Matching Diagnostics</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-2</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Communicate to the user precisely what failed to match. Conversation here: &lt;a href=&quot;http://groups.google.com/group/clojure/browse_thread/thread/675456fba1712214&quot;&gt;http://groups.google.com/group/clojure/browse_thread/thread/675456fba1712214&lt;/a&gt;. We adopt the behavior of condp since that is closer to what match does and will do (predicate dispatch)&lt;/p&gt;</description>
                <environment></environment>
            <key id="14601">MATCH-2</key>
            <summary>Matching Diagnostics</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 09:54:33 -0500</created>
                <updated>Thu, 27 Oct 2011 23:50:44 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="26762" author="dnolen" created="Mon, 5 Sep 2011 10:40:09 -0500"  >&lt;p&gt;Continuing the conversation from GitHub - concerning your changes, we should probably show what &lt;b&gt;current&lt;/b&gt; occurrence failed to match as well as the breadcrumb.&lt;/p&gt;</comment>
                    <comment id="26873" author="dnolen" created="Mon, 26 Sep 2011 07:10:04 -0500"  >&lt;p&gt;Matching diagnostics will be complicated by &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-1&quot; title=&quot;Investigate non-overlapping pattern optimization via pre-allocated exception for backtracking &quot;&gt;&lt;del&gt;MATCH-1&lt;/del&gt;&lt;/a&gt;. Clojure doesn&apos;t yet support simple data conveying exceptions. Will probably have to use a combination of proxy and definterface.&lt;/p&gt;</comment>
                    <comment id="26879" author="ambrosebs" created="Fri, 30 Sep 2011 04:39:01 -0500"  >&lt;p&gt;I haven&apos;t yet kept up with your backtracking changes, and I just noticed this conversation, so I&apos;ll have to have another look at diagnostics with backtracking.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-4] Optimized pattern matching on deftype/record, POJOs</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-4</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [x]
  [({:a 0 :b 1} :type Foo)] :a0
  ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;:a and :b would be converted to field access, i.e. (.a x)&lt;/p&gt;

&lt;p&gt;As with primitive array matching, we should do an instance check followed by hinted field access.&lt;/p&gt;

&lt;p&gt;We should consider adopting the deftype/record syntax.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14603">MATCH-4</key>
            <summary>Optimized pattern matching on deftype/record, POJOs</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 09:56:54 -0500</created>
                <updated>Thu, 27 Oct 2011 23:42:15 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27171" author="dnolen" created="Thu, 27 Oct 2011 16:41:00 -0500"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [x]
  [^Foo {.-bar 5 .-baz 7}] :a0
  [^Foo {.-bar _ .-woz 8}] :a1
  :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a2)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Given the recent ClojureScript property access discussions this seems like an acceptable syntax for high-performance property access.&lt;/p&gt;

&lt;p&gt;Maybe:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [^Foo x]
  [{.-bar 5 .-baz 7}] :a0
  [{.-bar _ .-woz 8}] :a1
  :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a2)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But probably not since then we should probably throw if someone tries to declare a different type in the row.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-7] Eliminate distinction between leaf-bind-expr and bind-expr</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-7</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;We should have a better considered binding model that works for all cases instead of treating leaf nodes and regular binding as different cases.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14606">MATCH-7</key>
            <summary>Eliminate distinction between leaf-bind-expr and bind-expr</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 10:00:02 -0500</created>
                <updated>Fri, 21 Oct 2011 18:55:52 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-8] Implement (p|q)ba heuristics</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-8</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;We should implement the rest of Maranget&apos;s suggested heuristics.&lt;/p&gt;

&lt;p&gt;p - needed prefix&lt;br/&gt;
q - constructor prefix&lt;br/&gt;
b - branching factor&lt;br/&gt;
a - constructor arity&lt;/p&gt;</description>
                <environment></environment>
            <key id="14607">MATCH-8</key>
            <summary>Implement (p|q)ba heuristics</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 10:00:57 -0500</created>
                <updated>Sun, 4 Sep 2011 10:00:57 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-9] use case for dispatching on literals</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-9</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Would speed up literal matching considerably.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14608">MATCH-9</key>
            <summary>use case for dispatching on literals</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Sep 2011 10:01:28 -0500</created>
                <updated>Mon, 10 Oct 2011 22:45:51 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-31] vector patterns should work on seq</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-31</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;This means abandoning subvec and using nth + offsets.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14683">MATCH-31</key>
            <summary>vector patterns should work on seq</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="3" iconUrl="http://dev.clojure.org/jira/images/icons/status_inprogress.gif">In Progress</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 Oct 2011 22:35:40 -0500</created>
                <updated>Wed, 30 Nov 2011 20:46:21 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-35] Bug in seq pattern matching</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-35</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(let [l &apos;(1 2 3)]
    (match [l]
      [([a &amp;amp; [b &amp;amp; [c d]]] :seq)] :a0
      :&lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; :a1))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Matches when it shouldn&apos;t.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14903">MATCH-35</key>
            <summary>Bug in seq pattern matching</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 27 Oct 2011 23:22:08 -0500</created>
                <updated>Wed, 11 Jan 2012 10:26:35 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27531" author="glchapman" created="Wed, 11 Jan 2012 10:24:59 -0600"  >&lt;p&gt;Another example of (I think) the same issue:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (let &lt;span class=&quot;error&quot;&gt;&amp;#91;x ()&amp;#93;&lt;/span&gt; (match &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; [(&lt;span class=&quot;error&quot;&gt;&amp;#91;h &amp;amp; t&amp;#93;&lt;/span&gt; :seq)] &lt;span class=&quot;error&quot;&gt;&amp;#91;h t&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; :a1))&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;nil ()&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Perhaps SeqPattern&apos;s IPatternCompile should call seq in order to filter empty seqs? (e.g.:&lt;/p&gt;

&lt;p&gt;  (to-source* &lt;span class=&quot;error&quot;&gt;&amp;#91;this ocr&amp;#93;&lt;/span&gt;&lt;br/&gt;
    `(and (or (seq? ~ocr) (sequential? ~ocr)) (seq ~ocr)))&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-36] throw on unsuccessful match</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-36</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;I was on the fence about this. But after looking at the literature as well as the behavior of condp, I&apos;ve decided that throwing on unsuccessful match is the way to go. This is particularly important since we put no constraints on the types allowed - we cannot determine exhaustiveness.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14904">MATCH-36</key>
            <summary>throw on unsuccessful match</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 27 Oct 2011 23:52:02 -0500</created>
                <updated>Wed, 30 Nov 2011 20:46:39 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-39] Allow matching of map expressions to restrict the set of keys present in the value to a subset of a specified set of keys</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-39</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;It is useful, to be able to constrain a match on a map value to limit the set of keys present in the value, without enforcing that the keys are all present in the value.&lt;/p&gt;

&lt;p&gt;The current :only option, enforces a strict matching of keys.&lt;/p&gt;

&lt;p&gt;{{(let [x {:a 1} (match &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; [({:a _ :b _} :only &lt;span class=&quot;error&quot;&gt;&amp;#91;:a :b&amp;#93;&lt;/span&gt;)])}} =&amp;gt; doesn&apos;t match&lt;/p&gt;

&lt;p&gt;This came up trying to write a precondition on the argument of a function, which allowed optional keys, but wanted to restrict the overall set of keys.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15023">MATCH-39</key>
            <summary>Allow matching of map expressions to restrict the set of keys present in the value to a subset of a specified set of keys</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Mon, 21 Nov 2011 11:03:28 -0600</created>
                <updated>Mon, 21 Nov 2011 12:34:22 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27333" author="dnolen" created="Mon, 21 Nov 2011 12:22:37 -0600"  >&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match x
  ({:c 1} :has [:a :b]) :a0
  ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match x
  ({:c 1} :contains [:a :b]) :a0
  ...)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Seems reasonable.&lt;/p&gt;</comment>
                    <comment id="27334" author="dnolen" created="Mon, 21 Nov 2011 12:34:22 -0600"  >&lt;p&gt;Ah misunderstood. You want something like :allowed.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-40] Allow or&apos;ing of guard functions</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-40</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;In order to simplify composition of guard predicates which are alternatives, allow for passing a sequence of predicates whose values when called will be or&apos;d together.&lt;/p&gt;

&lt;p&gt;The :when keyword currently allows passing of a vector of predicates that are and&apos;d together.&lt;/p&gt;

&lt;p&gt;Either case (`and` or `or`) can be achieved externally to match via composition, and an alternative might be to force explicit composition outside of core.match.&lt;/p&gt;

&lt;p&gt;At the least, the documentation should mention that multiple predicates will be and&apos;d together.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15024">MATCH-40</key>
            <summary>Allow or&apos;ing of guard functions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Mon, 21 Nov 2011 11:11:42 -0600</created>
                <updated>Mon, 21 Nov 2011 11:11:42 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-47] vector patterns dispatch on count after dispatching on type</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-47</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The current behavior just creates complications.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15087">MATCH-47</key>
            <summary>vector patterns dispatch on count after dispatching on type</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="3" iconUrl="http://dev.clojure.org/jira/images/icons/status_inprogress.gif">In Progress</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Dec 2011 21:41:42 -0600</created>
                <updated>Fri, 23 Dec 2011 22:22:41 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-49] Duplicate wildcard detection in pattern row doesn&apos;t account for locals</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-49</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description></description>
                <environment></environment>
            <key id="15112">MATCH-49</key>
            <summary>Duplicate wildcard detection in pattern row doesn&apos;t account for locals</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Thu, 12 Jan 2012 08:36:14 -0600</created>
                <updated>Thu, 12 Jan 2012 08:36:14 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-51] Fail to match empty vector </title>
                <link>http://dev.clojure.org/jira/browse/MATCH-51</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match (vector)
  ([(re :guard string?)] :seq) 4
  [] 6)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This should evaluate to 6 not nil. &lt;/p&gt;

</description>
                <environment></environment>
            <key id="15133">MATCH-51</key>
            <summary>Fail to match empty vector </summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Sat, 21 Jan 2012 09:29:51 -0600</created>
                <updated>Sat, 18 May 2013 14:24:24 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27598" author="jasonjckn" created="Sat, 21 Jan 2012 09:30:58 -0600"  >&lt;p&gt;tested on 0.2.0-alpha10-SNAPSHOT&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-53] Match doesn&apos;t work when AOT compiled into a JAR, but manually macroexpanding and JAR&apos;ing works fine.</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-53</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Code here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/35fa11df7d7516abff50&quot;&gt;https://gist.github.com/35fa11df7d7516abff50&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running lein uberjar on source containing the offending function, geo-&amp;gt;svg, results in a non-working application.&lt;br/&gt;
However, if match is manually macroexpanded in the repl and the results pasted in, then the JAR works just fine.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15247">MATCH-53</key>
            <summary>Match doesn&apos;t work when AOT compiled into a JAR, but manually macroexpanding and JAR&apos;ing works fine.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="lynaghk">Kevin Lynagh</reporter>
                        <labels>
                    </labels>
                <created>Fri, 24 Feb 2012 14:21:34 -0600</created>
                <updated>Sat, 18 May 2013 14:25:39 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>2</watches>
                        <comments>
                    <comment id="27847" author="lynaghk" created="Fri, 24 Feb 2012 14:27:53 -0600"  >&lt;p&gt;&quot;non-working&quot; meaning that the match always drops directly the :else clause.&lt;/p&gt;</comment>
                    <comment id="27860" author="lynaghk" created="Fri, 24 Feb 2012 18:09:08 -0600"  >&lt;p&gt;Updated code to minimal example. Problem persists with both Lein 1.7 and cake 0.6.3&lt;/p&gt;</comment>
                    <comment id="27876" author="dnolen" created="Sat, 25 Feb 2012 19:35:55 -0600"  >&lt;p&gt;AOT bugs are a bit tricky to track down. Not sure how soon I&apos;ll be able to really dive into this one.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-54] Cannot AOT with certain match expression.</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-54</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;If you try to AOT this code, you get an exception.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(defn -main [&amp;amp; args]
  (println args)
  (let [x nil] 
    (match x
      [&lt;span class=&quot;code-quote&quot;&gt;&quot;=&quot;&lt;/span&gt; _ _] &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
      [[:invoke _] _] &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)))&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Stack Trace:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Compiling foo.core
Exception in thread &lt;span class=&quot;code-quote&quot;&gt;&quot;main&quot;&lt;/span&gt; java.lang.IndexOutOfBoundsException, compiling:(foo/core.clj:8)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6416)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6177)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$BodyExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5572)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$LetExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5873)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6409)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6397)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6177)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$BodyExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5572)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$FnMethod.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:5008)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$FnExpr.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:3629)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6407)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6397)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.access$100(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:37)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;$DefExpr$Parser.parse(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:492)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6409)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6216)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyze(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6177)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.compile1(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6980)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.compile(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:7046)
	at clojure.lang.RT.compile(RT.java:385)
	at clojure.lang.RT.load(RT.java:425)
	at clojure.lang.RT.load(RT.java:398)
	at clojure.core$load$fn__4610.invoke(core.clj:5386)
	at clojure.core$load.doInvoke(core.clj:5385)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invoke(core.clj:5200)
	at clojure.core$compile$fn__4615.invoke(core.clj:5397)
	at clojure.core$compile.invoke(core.clj:5396)
	at user$eval27.invoke(NO_SOURCE_FILE:1)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6465)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6455)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.eval(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6431)
	at clojure.core$eval.invoke(core.clj:2795)
	at clojure.main$eval_opt.invoke(main.clj:296)
	at clojure.main$initialize.invoke(main.clj:315)
	at clojure.main$null_opt.invoke(main.clj:348)
	at clojure.main$main.doInvoke(main.clj:426)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at clojure.lang.Var.invoke(Var.java:405)
	at clojure.lang.AFn.applyToHelper(AFn.java:163)
	at clojure.lang.Var.applyTo(Var.java:518)
	at clojure.main.main(main.java:37)
Caused by: java.lang.IndexOutOfBoundsException
	at clojure.lang.PersistentVector.arrayFor(PersistentVector.java:106)
	at clojure.lang.PersistentVector.nth(PersistentVector.java:110)
	at clojure.lang.RT.nth(RT.java:741)
	at clojure.core.match.PatternRow.invoke(match.clj:327)
	at clojure.core.match.PatternMatrix.pattern_at(match.clj:713)
	at clojure.core.match$useful_p_QMARK_.invoke(match.clj:778)
	at clojure.core.match.PatternMatrix$iter__832__838$fn__839$iter__834__840$fn__841$fn__842.invoke(match.clj:735)
	at clojure.core.match.PatternMatrix$iter__832__838$fn__839$iter__834__840$fn__841.invoke(match.clj:733)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core.match.PatternMatrix$iter__832__838$fn__839.invoke(match.clj:734)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:67)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$partition$fn__3913.invoke(core.clj:2777)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$map$fn__3811.invoke(core.clj:2424)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.Cons.next(Cons.java:39)
	at clojure.lang.PersistentVector.create(PersistentVector.java:50)
	at clojure.lang.LazilyPersistentVector.create(LazilyPersistentVector.java:31)
	at clojure.core$vec.invoke(core.clj:345)
	at clojure.core.match.PatternMatrix.useful_matrix(match.clj:733)
	at clojure.core.match.PatternMatrix.necessary_column(match.clj:725)
	at clojure.core.match.PatternMatrix$choose_column__815.invoke(match.clj:690)
	at clojure.core.match.PatternMatrix.compile(match.clj:708)
	at clojure.core.match$first_column_chosen_case$switch_clauses__780$fn__781.invoke(match.clj:613)
	at clojure.core$map$fn__3815.invoke(core.clj:2437)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$reduce.invoke(core.clj:5994)
	at clojure.core$into.invoke(core.clj:6004)
	at clojure.core.match$first_column_chosen_case$switch_clauses__780.invoke(match.clj:616)
	at clojure.core.match$first_column_chosen_case.invoke(match.clj:646)
	at clojure.core.match.PatternMatrix.compile(match.clj:710)
	at clojure.core.match$first_column_chosen_case$switch_clauses__780$fn__781.invoke(match.clj:613)
	at clojure.core$map$fn__3815.invoke(core.clj:2437)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:466)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$reduce.invoke(core.clj:5994)
	at clojure.core$into.invoke(core.clj:6004)
	at clojure.core.match$first_column_chosen_case$switch_clauses__780.invoke(match.clj:616)
	at clojure.core.match$first_column_chosen_case.invoke(match.clj:646)
	at clojure.core.match.PatternMatrix.compile(match.clj:710)
	at clojure.core.match$clj_form.invoke(match.clj:1616)
	at clojure.core.match$match.doInvoke(match.clj:1645)
	at clojure.lang.RestFn.invoke(RestFn.java:573)
	at clojure.lang.Var.invoke(Var.java:426)
	at clojure.lang.AFn.applyToHelper(AFn.java:193)
	at clojure.lang.Var.applyTo(Var.java:518)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.macroexpand1(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6320)
	at clojure.lang.&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.analyzeSeq(&lt;span class=&quot;code-object&quot;&gt;Compiler&lt;/span&gt;.java:6395)
	... 46 more&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="15261">MATCH-54</key>
            <summary>Cannot AOT with certain match expression.</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="jasonjckn">Jason Jackson</reporter>
                        <labels>
                    </labels>
                <created>Sun, 4 Mar 2012 16:42:23 -0600</created>
                <updated>Sat, 18 May 2013 14:22:38 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-55] Matching a sequence with just a rest pattern fails to compile</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-55</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;In 0.2.0-alpha9,&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [ [1 2] ] [([&amp;amp; _] :seq)] &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;fails to compile with &lt;tt&gt;No method in multimethod &apos;to-source&apos; for dispatch value: class clojure.core.match.RestPattern&lt;/tt&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15287">MATCH-55</key>
            <summary>Matching a sequence with just a rest pattern fails to compile</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Wed, 21 Mar 2012 15:37:19 -0500</created>
                <updated>Wed, 21 Mar 2012 15:37:19 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-56] IndexOutOfBoundsException when matching empty vector</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-56</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Using the latest core.match:&lt;/p&gt;

&lt;p&gt;user=&amp;gt; (let [x []] (match &lt;span class=&quot;error&quot;&gt;&amp;#91;x&amp;#93;&lt;/span&gt; [&lt;span class=&quot;error&quot;&gt;&amp;#91;h &amp;amp; t&amp;#93;&lt;/span&gt;] &lt;span class=&quot;error&quot;&gt;&amp;#91;h t&amp;#93;&lt;/span&gt; :else :nomatch))&lt;br/&gt;
IndexOutOfBoundsException   clojure.lang.RT.subvec (RT.java:1451)&lt;/p&gt;

&lt;p&gt;Not sure if this is the best fix, but I resolved this specific case by slightly changing subvec-inline (see attached diff).&lt;/p&gt;</description>
                <environment>Clojure 1.3</environment>
            <key id="15298">MATCH-56</key>
            <summary>IndexOutOfBoundsException when matching empty vector</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="glchapman">Greg Chapman</reporter>
                        <labels>
                    </labels>
                <created>Tue, 27 Mar 2012 10:22:43 -0500</created>
                <updated>Tue, 27 Mar 2012 10:28:38 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28024" author="dnolen" created="Tue, 27 Mar 2012 10:28:38 -0500"  >&lt;p&gt;Thanks for the report. The patch is not going to work - we should be checking that the vector has at least one item.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11016" name="match.clj.diff" size="412" author="glchapman" created="Tue, 27 Mar 2012 10:22:43 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-57] Non deterministic match behavior for seqs when AOT</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-57</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The following source example:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/narkisr/match-issue/blob/master/src/match_issue/core.clj&quot;&gt;https://github.com/narkisr/match-issue/blob/master/src/match_issue/core.clj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The defrule macro calls a function called lhs that use the match library, &lt;/p&gt;

&lt;p&gt;this function calls it self recursively and print out the rest of body  left to be matched, &lt;/p&gt;

&lt;p&gt;When running lein compile two different results appear (in non deterministic fashion):&lt;/p&gt;

&lt;p&gt;(when $message :&amp;gt; Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
($message :&amp;gt; Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
(Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
((== level 6) :from (entry-point event-stream))&lt;/p&gt;

&lt;p&gt;This is the bug, as (== level 6) should be matched by:&lt;/p&gt;

&lt;p&gt;[([(&lt;span class=&quot;error&quot;&gt;&amp;#91;(o :when operator?) f s&amp;#93;&lt;/span&gt; :seq) :as c &amp;amp; r] :seq)]&lt;/p&gt;

&lt;p&gt;In other cases the output is (the correct one):&lt;/p&gt;

&lt;p&gt;(when $message :&amp;gt; Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
($message :&amp;gt; Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
(Message (== level 6) :from (entry-point event-stream))&lt;br/&gt;
((== level 6) :from (entry-point event-stream))&lt;br/&gt;
(:from (entry-point event-stream))&lt;br/&gt;
(entry-point event-stream)&lt;br/&gt;
()&lt;br/&gt;
()&lt;/p&gt;
</description>
                <environment>Clojure 1.3&lt;br/&gt;
&lt;br/&gt;
Leiningen 1.7.1 on Java 1.6.0_26&lt;br/&gt;
&lt;br/&gt;
core.match &amp;quot;0.2.0-alpha9&amp;quot;&lt;br/&gt;
</environment>
            <key id="15317">MATCH-57</key>
            <summary>Non deterministic match behavior for seqs when AOT</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="narkisr">Ronen Narkis</reporter>
                        <labels>
                    </labels>
                <created>Thu, 5 Apr 2012 19:47:42 -0500</created>
                <updated>Sat, 18 May 2013 14:29:42 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="28083" author="dnolen" created="Fri, 6 Apr 2012 11:03:51 -0500"  >&lt;p&gt;All AOT related issues w/o patches are low priority for the foreseeable future. They are simply too time consuming to track down and I don&apos;t have the bandwidth at the moment. I will get to them eventually, but if you want movement on this please submit a patch. I will happily apply it!&lt;/p&gt;</comment>
                    <comment id="28087" author="narkisr" created="Sat, 7 Apr 2012 19:53:58 -0500"  >&lt;p&gt;Hey David, &lt;/p&gt;

&lt;p&gt;After going through the source code and some more in depth look I managed to understand what was going on, first iv stepped through the different stages&lt;/p&gt;


&lt;p&gt;(def m (emit-matrix &lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;body&amp;#93;&lt;/span&gt; &lt;br/&gt;
    &apos;( [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;when &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (lhs r)&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;accumulate &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;accumulate(~(lhs r))&quot;)&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;bind &amp;#39;:&amp;gt; &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;~{bind}:~(lhs r)&quot;); pattern with bind&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;(t :when is-type?) &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;&lt;sub&gt;{t}&lt;/sub&gt;(lhs r)&quot;); pattern &lt;br/&gt;
       [([(&lt;span class=&quot;error&quot;&gt;&amp;#91;(f :when acc-fn?) &amp;amp; args&amp;#93;&lt;/span&gt; :seq) &amp;amp; r] :seq)] (&amp;lt;&amp;lt; &quot;,&lt;sub&gt;{f}&lt;/sub&gt;{args}~(lhs r)&quot; ); accumulate function&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;:from dest &amp;amp; r&amp;#93;&lt;/span&gt; :seq)]  (&amp;lt;&amp;lt; &quot;from ~(lhs dest) ~(lhs r)&quot;)&lt;br/&gt;
       [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;:over win &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;over ~(window win) ~(lhs r)&quot;)&lt;br/&gt;
       [([(&lt;span class=&quot;error&quot;&gt;&amp;#91;(o :when operator?) f s&amp;#93;&lt;/span&gt; :seq) :as c &amp;amp; r] :seq)] (&amp;lt;&amp;lt; &quot;(~(reduce str (map pr-str (to-infix c)))) ~(lhs r)&quot;)&lt;br/&gt;
         [(&lt;span class=&quot;error&quot;&gt;&amp;#91;&amp;#39;entry-point point &amp;amp; r&amp;#93;&lt;/span&gt; :seq)] (&amp;lt;&amp;lt; &quot;entry-point \&quot;~{point}\&quot;~(lhs r)&quot;)&lt;br/&gt;
         :else &quot;&quot;&lt;br/&gt;
         )))&lt;/p&gt;

&lt;p&gt;(def c (cm/compile m))&lt;/p&gt;

&lt;p&gt;(pprint c)&lt;/p&gt;

&lt;p&gt;(pprint (executable-form c))&lt;/p&gt;

&lt;p&gt;The last pprint failed aot compilation:&lt;/p&gt;

&lt;p&gt;$ lein compile&lt;/p&gt;

&lt;p&gt; ...&lt;br/&gt;
    Caused by: java.lang.ClassCastException: clojure.core.match.WildcardPattern cannot be cast to java.lang.String&lt;/p&gt;

&lt;p&gt;Which was very weird as I could clearly see that:&lt;/p&gt;

&lt;p&gt;(deftype WildcardPattern &lt;span class=&quot;error&quot;&gt;&amp;#91;sym _meta&amp;#93;&lt;/span&gt;&lt;br/&gt;
  IWildcardPattern&lt;br/&gt;
  (sym &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; sym)&lt;br/&gt;
  clojure.lang.IObj&lt;br/&gt;
  (meta &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt; _meta)&lt;br/&gt;
  (withMeta &lt;span class=&quot;error&quot;&gt;&amp;#91;_ new-meta&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (WildcardPattern. sym new-meta))&lt;br/&gt;
  Object&lt;br/&gt;
  (toString &lt;span class=&quot;error&quot;&gt;&amp;#91;_&amp;#93;&lt;/span&gt;&lt;br/&gt;
    (str sym)))&lt;/p&gt;

&lt;p&gt;Then iv also tried to enabled trace:&lt;/p&gt;

&lt;p&gt;(set-trace! true)&lt;/p&gt;


&lt;p&gt;Which resulted with:&lt;/p&gt;

&lt;p&gt;$ lein compile&lt;/p&gt;

&lt;p&gt;... &lt;/p&gt;

&lt;p&gt;TRACE: DAG: Column 0 : [#&amp;lt;SeqPattern &lt;a href=&quot;#&amp;lt;WildcardPattern t&amp;gt; #&amp;lt;WildcardPattern unit&amp;gt;&quot;&gt;#&amp;lt;LiteralPattern window&amp;gt; #&amp;lt;LiteralPattern :time&amp;gt; #&amp;lt;WildcardPattern t&amp;gt; #&amp;lt;WildcardPattern unit&amp;gt;&lt;/a&gt;&amp;gt;]&lt;br/&gt;
TRA	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6416)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6216)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6177)&lt;br/&gt;
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5572)&lt;br/&gt;
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5008)&lt;br/&gt;
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3629)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6407)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6216)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6397)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6216)&lt;br/&gt;
	at clojure.lang.Compiler.access$100(Compiler.java:37)&lt;br/&gt;
	at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:492)&lt;br/&gt;
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6409)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6216)&lt;br/&gt;
	at clojure.lang.Compiler.analyze(Compiler.java:6177)&lt;br/&gt;
	at clojure.lang.Compiler.compile1(Compiler.java:6980)&lt;br/&gt;
	at clojure.lang.Compiler.compile(Compiler.java:7046)&lt;br/&gt;
	at clojure.lang.RT.compile(RTCE: DAG: Add switch-node on occurrence  exp&lt;/p&gt;


&lt;p&gt;The most weird thing was that on second compile it all went well, this raised a flag and my suspicion was that the core.match classes got compiled on the first run:&lt;/p&gt;

&lt;p&gt;$ ls classes/&lt;/p&gt;

&lt;p&gt;match$analyze_actions$analyze_action__1166.class&lt;br/&gt;
match$analyze_actions.class&lt;br/&gt;
match$backtrack_expr.class&lt;br/&gt;
match$bind_node.class&lt;br/&gt;
match$catch_error.class&lt;br/&gt;
match$check_matrix_args$check_pattern__1150.class&lt;br/&gt;
...&lt;/p&gt;

&lt;p&gt;Then iv decided to AOT compile clojure.core match:&lt;/p&gt;

&lt;p&gt;$ git checkout core.match-0.2.0-alpha9&lt;br/&gt;
$ git diff project.clj&lt;br/&gt;
-(defproject match &quot;0.2.0-alpha10-SNAPSHOT&quot;&lt;br/&gt;
+(defproject match &quot;0.2.0-alpha10-aot&quot;&lt;br/&gt;
   :description &quot;Optimized pattern matching and predicate dispatch for Clojure&quot;&lt;br/&gt;
   :source-path &quot;src/main/clojure&quot;&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;:test-path &quot;src/test/clojure&quot;)&lt;br/&gt;
+  :test-path &quot;src/test/clojure&quot;&lt;br/&gt;
+  :aot &lt;span class=&quot;error&quot;&gt;&amp;#91;clojure.core.match&amp;#93;&lt;/span&gt; &lt;br/&gt;
+  )&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;After using the aot jar it all went smooth including passing my non deterministic case (which is deterministic but very confusing to track down), &lt;/p&gt;

&lt;p&gt;In order to reproduce it its important to run:&lt;/p&gt;

&lt;p&gt;$ lein clean &lt;br/&gt;
$ rm -rf lib &lt;/p&gt;

&lt;p&gt;And only then run &lt;/p&gt;

&lt;p&gt;$ lein compile&lt;/p&gt;

&lt;p&gt;Otherwise the classes dir might contain AOT&apos;ed classes and make it seem that even non-aot jar works fine (its enough to run lein compile once to cause the classes to get compiled), &lt;/p&gt;

&lt;p&gt;The fix in my case is simple, just AOT ns. &lt;/p&gt;

&lt;p&gt;Im not sure if this Is a bug in the way Clojure AOT its classes but I think that adding the AOT&apos;ed classes to the default core match distro is a reasonable workaround &lt;/p&gt;

&lt;p&gt;BTW when using master (and not the tag) iv stumbled upon:&lt;/p&gt;

&lt;p&gt;  Exception in thread &quot;main&quot; java.lang.AssertionError: Assert failed: Unknown predicate in &lt;span class=&quot;error&quot;&gt;&amp;#91;is-type?&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Which is a pred defined in my ns.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-58] we should test the presence of key with find, not get</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-58</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;If a user really doesn&apos;t care about the existence of a key they won&apos;t match on it. The current behavior is very confusing.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15319">MATCH-58</key>
            <summary>we should test the presence of key with find, not get</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 7 Apr 2012 19:34:26 -0500</created>
                <updated>Sat, 7 Apr 2012 19:34:26 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-61] Exception thrown when matching using :seq when there is a seq call in the tail of the occurrences</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-61</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;&amp;lt;iframe style=&quot;width: 648px; height: 400px; border: 0px;&quot; src=&quot;http://refheap.com/paste/3294/framed&quot; &amp;gt;&lt;/p&gt;

&lt;p&gt;I also tested with three occurrences. When there is a seq call in the second occurrence onward a RuntimeException is thrown. &lt;/p&gt;</description>
                <environment>with Clojure 1.3</environment>
            <key id="15550">MATCH-61</key>
            <summary>Exception thrown when matching using :seq when there is a seq call in the tail of the occurrences</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="etosch">Emma Tosch</reporter>
                        <labels>
                        <label>bug</label>
                        <label>seq</label>
                    </labels>
                <created>Fri, 22 Jun 2012 16:11:35 -0500</created>
                <updated>Fri, 22 Jun 2012 17:33:34 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="28890" author="etosch" created="Fri, 22 Jun 2012 17:33:34 -0500"  >&lt;p&gt;&lt;a href=&quot;https://gist.github.com/626088b01817ac638fae&quot;&gt;https://gist.github.com/626088b01817ac638fae&lt;/a&gt;&lt;br/&gt;
Two expressions, macro-expanded. The only difference between the expressions is that the second occurrence in the second expression is seq&apos;ed. The second let is the one throwing the exception; it&apos;s the one with the binding&lt;/p&gt;

&lt;p&gt;(clojure.core/let [q_tail_&lt;em&gt;3472 q_tail&lt;/em&gt;_3472&lt;br/&gt;
                   q_head_&lt;em&gt;3471 q_head&lt;/em&gt;_3471&lt;br/&gt;
                   ocr-3470 (seq y)&lt;br/&gt;
                   z z]&lt;br/&gt;
...)&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-64] Improve match compile times</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-64</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description></description>
                <environment></environment>
            <key id="15630">MATCH-64</key>
            <summary>Improve match compile times</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Wed, 15 Aug 2012 13:04:32 -0500</created>
                <updated>Wed, 15 Aug 2012 13:04:32 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-65] cata matching</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-65</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;Dan Friedman&apos;s pattern matcher has a nice feature called cata-matching - allowing recursive matching from the match itself. Useful when writing compilers.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15851">MATCH-65</key>
            <summary>cata matching</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Fri, 23 Nov 2012 16:54:30 -0600</created>
                <updated>Fri, 23 Nov 2012 16:54:30 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MATCH-68] Vector match &quot;underflow&quot; =&gt; IndexOutOfBoundsException</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-68</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;This fails with &lt;tt&gt;0.2.0-alpha12&lt;/tt&gt;:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [[:x]]
  [[m n &amp;amp; _]] 1)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I expect nil, but an unguarded &lt;tt&gt;subvec&lt;/tt&gt; call throws an &lt;tt&gt;IndexOutOfBoundsException&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;A WIP patch is attached that fixes this (perhaps incorrectly) but which produced regressions (outside of core.match), e.g.&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;(match [[[:x &lt;span class=&quot;code-quote&quot;&gt;&quot;t&quot;&lt;/span&gt;]]]
 [[[:x &amp;amp; a] &amp;amp; tail]] :a
 [[[:y &amp;amp; p] [:x &amp;amp; a] &amp;amp; tail]] :b)
=&amp;gt; nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The patch also &quot;fixes&quot; this (by changing &lt;tt&gt;pattern-compare&lt;/tt&gt; behaviour for rest &lt;tt&gt;VectorPattern&lt;/tt&gt; s, but that leads to a regression in the &lt;tt&gt;vector-pattern-rest-2&lt;/tt&gt; testcase in core.match.&lt;/p&gt;

&lt;p&gt;(Original discussion with further background &lt;a href=&quot;http://groups.google.com/group/clojure-dev/browse_thread/thread/cc2399f966489c6c?hl=en&quot;&gt;here&lt;/a&gt;.)&lt;/p&gt;</description>
                <environment></environment>
            <key id="16154">MATCH-68</key>
            <summary>Vector match &quot;underflow&quot; =&gt; IndexOutOfBoundsException</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Mon, 22 Apr 2013 12:40:00 -0500</created>
                <updated>Sat, 18 May 2013 15:11:12 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30989" author="glchapman" created="Wed, 24 Apr 2013 17:26:31 -0500"  >&lt;p&gt;FWIW, I&apos;ve been using the patch described &lt;a href=&quot;http://dev.clojure.org/jira/browse/MATCH-56&quot;&gt;here&lt;/a&gt;, and haven&apos;t yet run into any problems, though I also haven&apos;t used core.match that much. Anyway, with the change to subvec-inline, both of the cases here act as expected (producing nil and :a, respectively).&lt;/p&gt;

&lt;p&gt;(I note looking at my patch that I&apos;m doubly-evaluating ocr in the second overload; obviously that should be fixed with a let binding).&lt;/p&gt;</comment>
                    <comment id="31111" author="dnolen" created="Sat, 18 May 2013 15:11:12 -0500"  >&lt;p&gt;The patch looks like it&apos;s going in the right direction. Can you explain why your patch without the pattern-compares case causes the second example to fail?&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11966" name="vector-rest-WIP.diff" size="2850" author="cemerick" created="Mon, 22 Apr 2013 12:40:00 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10002">Code and Test</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[MATCH-69] AOT-compiling match expression produces stack overflow</title>
                <link>http://dev.clojure.org/jira/browse/MATCH-69</link>
                <project id="10050" key="MATCH">core.match</project>
                        <description>&lt;p&gt;The offending match expression is pretty gnarly, will try to simplify and post it here later.  For now, a (partial) stack trace, eliding the repeating bits:&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;Caused by: java.lang.StackOverflowError
	at clojure.core$map$fn__4207.invoke(core.clj:2479)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.ChunkedCons.chunkedNext(ChunkedCons.java:59)
	at clojure.lang.ChunkedCons.next(ChunkedCons.java:43)
	at clojure.lang.PersistentVector.create(PersistentVector.java:51)
	at clojure.lang.LazilyPersistentVector.create(LazilyPersistentVector.java:31)
	at clojure.core$vec.invoke(core.clj:354)
	at clojure.core.match.PatternMatrix.column(match.clj:713)
	at clojure.core.match$useful_p_QMARK_.invoke(match.clj:811)
	at clojure.core.match.PatternMatrix$iter__1458__1464$fn__1465$iter__1460__1466$fn__1467$fn__1468.invoke(match.clj:765)
	at clojure.core.match.PatternMatrix$iter__1458__1464$fn__1465$iter__1460__1466$fn__1467.invoke(match.clj:763)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core.match.PatternMatrix$iter__1458__1464$fn__1465.invoke(match.clj:764)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:67)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$partition$fn__4309.invoke(core.clj:2834)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core$map$fn__4207.invoke(core.clj:2479)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.Cons.next(Cons.java:39)
	at clojure.lang.PersistentVector.create(PersistentVector.java:51)
	at clojure.lang.LazilyPersistentVector.create(LazilyPersistentVector.java:31)
	at clojure.core$vec.invoke(core.clj:354)
	at clojure.core.match.PatternMatrix.useful_matrix(match.clj:763)
	at clojure.core.match.PatternMatrix.necessary_column(match.clj:755)
	at clojure.core.match.PatternMatrix$choose_column__1441.invoke(match.clj:720)
	at clojure.core.match.PatternMatrix.compile(match.clj:738)
	at clojure.core.match$first_column_chosen_case$switch_clauses__1406$fn__1407.invoke(match.clj:643)
	at clojure.core$map$fn__4211.invoke(core.clj:2492)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core.protocols$seq_reduce.invoke(protocols.clj:30)
	at clojure.core.protocols$fn__6026.invoke(protocols.clj:54)
	at clojure.core.protocols$fn__5979$G__5974__5992.invoke(protocols.clj:13)
	at clojure.core$reduce.invoke(core.clj:6177)
	at clojure.core$into.invoke(core.clj:6229)
	at clojure.core.match$first_column_chosen_case$switch_clauses__1406.invoke(match.clj:646)
	at clojure.core.match$first_column_chosen_case.invoke(match.clj:676)
	at clojure.core.match.PatternMatrix.compile(match.clj:740)
	at clojure.core.match$first_column_chosen_case$switch_clauses__1406$fn__1407.invoke(match.clj:643)
	at clojure.core$map$fn__4211.invoke(core.clj:2492)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:60)
	at clojure.lang.RT.seq(RT.java:484)
	at clojure.core$seq.invoke(core.clj:133)
	at clojure.core.protocols$seq_reduce.invoke(protocols.clj:30)
	at clojure.core.protocols$fn__6026.invoke(protocols.clj:54)
	at clojure.core.protocols$fn__5979$G__5974__5992.invoke(protocols.clj:13)
	at clojure.core$reduce.invoke(core.clj:6177)
	at clojure.core$into.invoke(core.clj:6229)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
            <key id="16157">MATCH-69</key>
            <summary>AOT-compiling match expression produces stack overflow</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Wed, 24 Apr 2013 16:04:23 -0500</created>
                <updated>Wed, 24 Apr 2013 16:04:23 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MCOMB-2] OutOfMemory Error with combinatorics/subsets</title>
                <link>http://dev.clojure.org/jira/browse/MCOMB-2</link>
                <project id="10079" key="MCOMB">math.combinatorics</project>
                        <description>&lt;p&gt;Hello guys,&lt;/p&gt;

&lt;p&gt;I have an issue with an OutOfMemory error with bigger sets and the subsets command.&lt;/p&gt;


&lt;p&gt;I have bigger sets of 1000+ elements and want to lazily create all possible subsets of this set in order to filter out some that are interesting to me.&lt;/p&gt;

&lt;p&gt;I was very happy to run into your library as it handles the heavy lifting for me and I only have to do the filtering. Nice!&lt;/p&gt;

&lt;p&gt;But if I run this sample code&lt;/p&gt;

&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeHeader panelHeader&quot; style=&quot;border-bottom-width: 1px;&quot;&gt;&lt;b&gt;lein repl&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;=&amp;gt; (last (clojure.math.combinatorics/subsets (range 1000)))
OutOfMemoryError Java heap space  clojure.core/map (core.clj:2469)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;it returns with an OutOfMemory Error to me.&lt;br/&gt;
I thought the memory usage of subsets would be constant as the function should return a lazy list.&lt;/p&gt;

&lt;p&gt;It would be really nice if this library could calculate subsets of bigger lists without running into memory problems.&lt;/p&gt;

&lt;p&gt;I posted this question on StackOverflow with more information:&lt;br/&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/16194841/clojure-lazy-sequences-in-math-combinatorics-results-in-outofmemory-oom-error&quot;&gt;http://stackoverflow.com/questions/16194841/clojure-lazy-sequences-in-math-combinatorics-results-in-outofmemory-oom-error&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And people replied that they don&apos;t have this issue. Is this an issue with my platform or is this an issue with the memory usage of subsets?&lt;br/&gt;
It would be great if you could show me a way to get around this issue.&lt;/p&gt;

&lt;p&gt;If I can be of any help, just let me know.&lt;/p&gt;

&lt;p&gt;Cheers, Mark&lt;/p&gt;</description>
                <environment>Mac OS X 10.8.3&lt;br/&gt;
Clojure 1.5.1 (installed with homebrew)&lt;br/&gt;
Leiningen 2.1.3 on Java 1.6.0_45 Java HotSpot(TM) 64-Bit Server VM&lt;br/&gt;
-Xmx2048M&lt;br/&gt;
math.combinatorics 0.0.4&lt;br/&gt;
&lt;br/&gt;
% java -version&lt;br/&gt;
java version &amp;quot;1.6.0_45&amp;quot;&lt;br/&gt;
Java(TM) SE Runtime Environment (build 1.6.0_45-b06-451-11M4406)&lt;br/&gt;
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01-451, mixed mode)</environment>
            <key id="16169">MCOMB-2</key>
            <summary>OutOfMemory Error with combinatorics/subsets</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="markengelberg">Mark Engelberg</assignee>
                                <reporter username="mren">Mark Engel</reporter>
                        <labels>
                    </labels>
                <created>Mon, 29 Apr 2013 04:37:30 -0500</created>
                <updated>Thu, 2 May 2013 14:30:07 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="31020" author="scdf" created="Mon, 29 Apr 2013 05:29:54 -0500"  >&lt;p&gt;I get this as well, 2009 MBP, with any (range x) higher than 18.&lt;/p&gt;</comment>
                    <comment id="31021" author="mren" created="Mon, 29 Apr 2013 08:32:28 -0500"  >&lt;p&gt;Great to have the problem reproduced at another computer.&lt;/p&gt;

&lt;p&gt;I just found an article describing an OutOfMemory Error with mapcat, which is used in the subsets function&lt;br/&gt;
&lt;a href=&quot;http://clojurian.blogspot.de/2012/11/beware-of-mapcat.html&quot;&gt;http://clojurian.blogspot.de/2012/11/beware-of-mapcat.html&lt;/a&gt;.&lt;/p&gt;</comment>
                    <comment id="31041" author="jafingerhut" created="Thu, 2 May 2013 14:30:07 -0500"  >&lt;p&gt;Patch mcomb-2-allow-subsets-to-use-less-memory-v1.txt dated May 2 2013 seems to fix this problem.&lt;/p&gt;

&lt;p&gt;range returns a chunked sequence, and when map processes a chunked sequence it preserves the chunks.  Chunks are little Java arrays of Object references, pointing at the results, and none of them will be GCed until the entire chunk is finished being processed.&lt;/p&gt;

&lt;p&gt;It might be that a few other calls to unchunk wrapped around range calls might be useful in the math.combinatorics library, but certainly not all of them.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11979" name="mcomb-2-allow-subsets-to-use-less-memory-v1.txt" size="1627" author="jafingerhut" created="Thu, 2 May 2013 14:30:07 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[MTOWER-3] BigDecimal: unnecessary reflection  used in  math functions for coercion (bigint)</title>
                <link>http://dev.clojure.org/jira/browse/MTOWER-3</link>
                <project id="10080" key="MTOWER">math.numeric-tower</project>
                        <description>&lt;p&gt;This improves performance, because no reflection has to be used (bigint):&lt;/p&gt;


&lt;p&gt;Patched:&lt;br/&gt;
clojure.math.numeric-tower&amp;gt; (time (let &lt;span class=&quot;error&quot;&gt;&amp;#91;b (BigDecimal. &amp;quot;2.2&amp;quot;)&amp;#93;&lt;/span&gt; (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;x 10000000&amp;#93;&lt;/span&gt; (round b))))&lt;br/&gt;
&quot;Elapsed time: 1640.177041 msecs&quot;                                                                                                                                                             &lt;br/&gt;
Orig:                                                                                                                                                                                         &lt;br/&gt;
clojure.math.numeric-tower&amp;gt; (time (let &lt;span class=&quot;error&quot;&gt;&amp;#91;b (BigDecimal. &amp;quot;2.2&amp;quot;)&amp;#93;&lt;/span&gt; (dotimes &lt;span class=&quot;error&quot;&gt;&amp;#91;x 10000000&amp;#93;&lt;/span&gt; (round b))))&lt;br/&gt;
&quot;Elapsed time: 3498.339271 msecs&quot;&lt;/p&gt;
</description>
                <environment></environment>
            <key id="16186">MTOWER-3</key>
            <summary>BigDecimal: unnecessary reflection  used in  math functions for coercion (bigint)</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="markengelberg">Mark Engelberg</assignee>
                                <reporter username="juergenhoetzel">J&#252;rgen H&#246;tzel</reporter>
                        <labels>
                        <label>patch,</label>
                    </labels>
                <created>Mon, 13 May 2013 14:48:19 -0500</created>
                <updated>Mon, 13 May 2013 14:48:19 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                    <attachment id="11990" name="0001-Use-coercion-and-rounding-methods-provided-by-BigDec.patch" size="1195" author="juergenhoetzel" created="Mon, 13 May 2013 14:48:19 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                            <customfield id="customfield_10000" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                <customfieldname>Patch</customfieldname>
                <customfieldvalues>
                        <customfieldvalue key="10001">Code</customfieldvalue>

                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[NREPL-3] Adopt default port</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-3</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description>&lt;p&gt;7888 is &quot;free&quot;, at least in IANA.&lt;/p&gt;

&lt;p&gt;Most users want to put an nREPL port on their app, and that should always be on a typical port.  Auto-selection of a port is only desirable in tooling scenarios, and tooling authors can pass an argument to &lt;tt&gt;start-server&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;This will change the behaviour of &lt;tt&gt;(start-server)&lt;/tt&gt;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14657">NREPL-3</key>
            <summary>Adopt default port</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Fri, 30 Sep 2011 10:56:53 -0500</created>
                <updated>Mon, 22 Oct 2012 19:54:53 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[NREPL-4] Provide sane multiplexing of output in the face of multithreaded, asynchronous operation</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-4</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description>&lt;p&gt;Basically, &lt;tt&gt;(send-off some-agent println)&lt;/tt&gt; &amp;amp; co. should get what&apos;s printed to &lt;tt&gt;&lt;b&gt;out&lt;/b&gt;&lt;/tt&gt; in that agent&apos;s thread back to the nREPL client &#8212; not silently let it dump out to &lt;tt&gt;System/out&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/flatland/portal&quot;&gt;Portal&lt;/a&gt; ostensibly does this well.  Examine their approach, see if it is compatible with nREPL&apos;s objectives.&lt;/p&gt;

&lt;p&gt;Ill-formed brain dump:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;multiplex new &lt;b&gt;out&lt;/b&gt;&apos;s to System/out
	&lt;ul&gt;
		&lt;li&gt;(still won&apos;t solve clojure.test/&lt;b&gt;test-out&lt;/b&gt; content will disappearing into the ether when it&apos;s loaded when &lt;b&gt;out&lt;/b&gt; is bound to an nREPL out; maybe we should ensure &lt;b&gt;out&lt;/b&gt; is bound to System/out while code is being loaded?)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;optionally multiplex System/out and System/err&lt;/li&gt;
	&lt;li&gt;optionally join multiplexed S/out and S/err, receive :stdout, :stderr msgs&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
            <key id="14658">NREPL-4</key>
            <summary>Provide sane multiplexing of output in the face of multithreaded, asynchronous operation</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Fri, 30 Sep 2011 11:10:25 -0500</created>
                <updated>Wed, 3 Oct 2012 07:29:23 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[NREPL-15] Allow clients to specify an ID for newly-retained sessions</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-15</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description>&lt;p&gt;...particularly important where less sophisticated clients and polling-oriented transports are involved (e.g. HTTP).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15305">NREPL-15</key>
            <summary>Allow clients to specify an ID for newly-retained sessions</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Thu, 29 Mar 2012 12:51:29 -0500</created>
                <updated>Fri, 12 Oct 2012 00:52:25 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[NREPL-24] :session key is overloaded</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-24</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description>&lt;p&gt;The session middleware takes the :session key from the message, and uses it as an id to lookup session data, which it then places on the same key.&lt;/p&gt;

&lt;p&gt;Using a separate key for the session id and the session data would be less confusing, and would allow easier checking of the availability of the session data in the message map.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15621">NREPL-24</key>
            <summary>:session key is overloaded</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Fri, 10 Aug 2012 13:44:22 -0500</created>
                <updated>Wed, 3 Oct 2012 07:05:07 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29112" author="cemerick" created="Fri, 10 Aug 2012 23:26:15 -0500"  >&lt;p&gt;The session id will need to continue to come in in the &lt;tt&gt;:session&lt;/tt&gt; slot, as I don&apos;t want to break clients (and, there&apos;s very, very few middlewares out there yet).&lt;/p&gt;

&lt;p&gt;Suggestions for names for the actual session atom?  &lt;tt&gt;:the-session&lt;/tt&gt;? :-/&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[NREPL-28] Clarify semantics for String encoding</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-28</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description></description>
                <environment></environment>
            <key id="15639">NREPL-28</key>
            <summary>Clarify semantics for String encoding</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="cemerick">Chas Emerick</reporter>
                        <labels>
                    </labels>
                <created>Tue, 21 Aug 2012 20:27:05 -0500</created>
                <updated>Thu, 11 Oct 2012 14:20:38 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="29249" author="cemerick" created="Tue, 21 Aug 2012 20:27:51 -0500"  >&lt;p&gt;Initial discussion held in &lt;a href=&quot;http://dev.clojure.org/jira/browse/NREPL-11&quot; title=&quot;Ensure efficient bytestring (byte[]) support in bencode transport&quot;&gt;&lt;del&gt;NREPL-11&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[NREPL-29] Provide a mechanism for overriding an operation</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-29</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description>&lt;p&gt;When specifying middleware, it would be much easier for the user to be able to override a default middleware without having to specify a handler.&lt;/p&gt;

&lt;p&gt;For example, if there is a default middleware providing the &quot;complete&quot; operation, the user should be able to just specify their preferred completion middleware, without having to specify all middleware as a handler.&lt;/p&gt;

&lt;p&gt;One way to do this might be to check metadata for the provided operations of the specified metadata, and ensure that either the default middleware for that operation is removed, or that the specified middleware takes precendence (which may be simpler when a middleware provides multiple operations).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15687">NREPL-29</key>
            <summary>Provide a mechanism for overriding an operation</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Sun, 9 Sep 2012 14:11:13 -0500</created>
                <updated>Tue, 13 Nov 2012 12:17:57 -0600</updated>
                                    <version>0.2.0-beta9</version>
                <version>0.2.0-beta10</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29439" author="cemerick" created="Fri, 14 Sep 2012 07:44:39 -0500"  >&lt;p&gt;Agreed.&lt;/p&gt;

&lt;p&gt;Just making sure that the order in which additional middlewares are provided is taken as a default stack order will suffice for most use cases.  Transforming middlewares (either in full or in part) would need another metadata slot, &lt;tt&gt;:replace&lt;/tt&gt; perhaps, though it seems like that would be much more difficult to get right.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[NREPL-33] Consider making session and eval functionality more accessible</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-33</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description>&lt;p&gt;ritz re-uses some of nrepl&apos;s private functions to avoid duplication. The uses are listed below.&lt;/p&gt;

&lt;p&gt;Would it be possible to make these functions public? More subjectively, it might also be worth considering factoring out the session functionality into it&apos;s own namespace (including &lt;b&gt;msg&lt;/b&gt; and possibly queue-eval), so the functionality is not split across the session middleware and the interruptible-eval middleware.&lt;/p&gt;

&lt;p&gt;The debug nrepl server: &lt;br/&gt;
&lt;a href=&quot;https://github.com/pallet/ritz/blob/develop/nrepl/src/ritz/nrepl.clj#L189&quot;&gt;https://github.com/pallet/ritz/blob/develop/nrepl/src/ritz/nrepl.clj#L189&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This uses clojure.tools.nrepl.middleware.session/create-session and clojure.tools.nrepl.middleware.session/session-out &lt;/p&gt;


&lt;p&gt;ritz provides an eval op that tracks source forms: &lt;br/&gt;
&lt;a href=&quot;https://github.com/pallet/ritz/blob/develop/nrepl-middleware/src/ritz/nrepl/middleware/tracking_eval.clj&quot;&gt;https://github.com/pallet/ritz/blob/develop/nrepl-middleware/src/ritz/nrepl/middleware/tracking_eval.clj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This uses  clojure.tools.nrepl.middleware.interruptible-eval/queue-eval and clojure.tools.nrepl.middleware.interruptible-eval/configure-executor&lt;/p&gt;



</description>
                <environment></environment>
            <key id="15737">NREPL-33</key>
            <summary>Consider making session and eval functionality more accessible</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="hugoduncan">Hugo Duncan</reporter>
                        <labels>
                    </labels>
                <created>Mon, 8 Oct 2012 13:24:45 -0500</created>
                <updated>Mon, 8 Oct 2012 13:24:45 -0500</updated>
                                    <version>0.2.0-beta9</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[NREPL-36] Too many DynamicClassLoaders created</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-36</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description>&lt;p&gt;Not sure whether this ticket belongs here or in the Clojure-proper JIRA, so feel free to close if this is an inappropriate location. clojure.main/repl creates a new DynamicClassLoader on every execution, so it looks like the stack of classloaders grows without bounds. Seems a bit similar to &lt;a href=&quot;http://dev.clojure.org/jira/browse/NREPL-31&quot;&gt;http://dev.clojure.org/jira/browse/NREPL-31&lt;/a&gt; in that clojure.main/repl has another assumption about when clojure.main/repl will run.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;https://groups.google.com/forum/?fromgroups=#!topic/clojure/firG9zTVecU%5B1-25%5D&quot;&gt;https://groups.google.com/forum/?fromgroups=#!topic/clojure/firG9zTVecU%5B1-25%5D&lt;/a&gt; for the original report.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15879">NREPL-36</key>
            <summary>Too many DynamicClassLoaders created</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="2" iconUrl="http://dev.clojure.org/jira/images/icons/priority_critical.gif">Critical</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="trptcolin">Colin Jones</reporter>
                        <labels>
                    </labels>
                <created>Mon, 10 Dec 2012 10:31:45 -0600</created>
                <updated>Mon, 10 Dec 2012 14:25:30 -0600</updated>
                                    <version>0.2.0-RC1</version>
                <version>0.2.0-beta9</version>
                <version>0.2.0-beta10</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[NREPL-40] Thread leak in clojure.tools.nrepl.transport$fn_transport?</title>
                <link>http://dev.clojure.org/jira/browse/NREPL-40</link>
                <project id="10022" key="NREPL">tools.nrepl</project>
                        <description>&lt;p&gt;When trying out remote eval using your sample in the README, ie &lt;/p&gt;

&lt;p&gt;(with-open &lt;span class=&quot;error&quot;&gt;&amp;#91;conn (repl/connect :port 59258)&amp;#93;&lt;/span&gt;&lt;br/&gt;
     (-&amp;gt; (repl/client conn 1000)    ; message receive timeout required&lt;br/&gt;
       (repl/message {:op &quot;eval&quot; :code &quot;(+ 2 3)&quot;})&lt;br/&gt;
       repl/response-values))&lt;/p&gt;

&lt;p&gt;I&apos;m noticing that hosting process leaking a thread each time the remote eval is called. Jconsole shows a clojure-agent-send-off-pool-xxx thread got spawn as result of the call. The stack appears to be pointing to the &quot;while true&quot; loop inside fn_transport.  &lt;/p&gt;

&lt;p&gt;java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)&lt;br/&gt;
java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)&lt;br/&gt;
java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)&lt;br/&gt;
java.util.concurrent.SynchronousQueue.put(SynchronousQueue.java:878)&lt;br/&gt;
clojure.tools.nrepl.transport$fn_transport$fn__3912.invoke(transport.clj:44)&lt;br/&gt;
clojure.core$binding_conveyor_fn$fn__3989.invoke(core.clj:1819)&lt;br/&gt;
clojure.lang.AFn.call(AFn.java:18)&lt;br/&gt;
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)&lt;br/&gt;
java.util.concurrent.FutureTask.run(FutureTask.java:166)&lt;br/&gt;
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)&lt;br/&gt;
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)&lt;br/&gt;
java.lang.Thread.run(Thread.java:722)&lt;/p&gt;

&lt;p&gt;What do you recommend as way to free the thread? I have server code that calls nrepl on behave of client connections and the number of call can pile up fairly quickly.      &lt;/p&gt;</description>
                <environment>Windows 7 x64, Oracle JDK 1.7.0.11 x64, clojure 1.4.0 </environment>
            <key id="16080">NREPL-40</key>
            <summary>Thread leak in clojure.tools.nrepl.transport$fn_transport?</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="cemerick">Chas Emerick</assignee>
                                <reporter username="davidlao">David Lao</reporter>
                        <labels>
                    </labels>
                <created>Mon, 11 Mar 2013 20:11:48 -0500</created>
                <updated>Tue, 12 Mar 2013 15:37:23 -0500</updated>
                                    <version>0.2.1</version>
                <version>0.2.2</version>
                                                        <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="30745" author="davidlao" created="Tue, 12 Mar 2013 15:37:23 -0500"  >&lt;p&gt;Here is my workaround.&lt;/p&gt;

&lt;p&gt;&amp;#8212; a/src/main/clojure/clojure/tools/nrepl/transport.clj&lt;br/&gt;
+++ b/src/main/clojure/clojure/tools/nrepl/transport.clj&lt;br/&gt;
@@ -36,12 +36,12 @@&lt;br/&gt;
    to the 2 or 3 functions provided.&quot;&lt;br/&gt;
   (&lt;span class=&quot;error&quot;&gt;&amp;#91;read write&amp;#93;&lt;/span&gt; (fn-transport read write nil))&lt;br/&gt;
   (&lt;span class=&quot;error&quot;&gt;&amp;#91;read write close&amp;#93;&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;(let &lt;span class=&quot;error&quot;&gt;&amp;#91;read-queue (SynchronousQueue.)&amp;#93;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;(future (try&lt;/li&gt;
	&lt;li&gt;(while true&lt;/li&gt;
	&lt;li&gt;(.put read-queue (read)))&lt;/li&gt;
	&lt;li&gt;(catch Throwable t&lt;/li&gt;
	&lt;li&gt;(.put read-queue t))))&lt;br/&gt;
+    (let [read-queue (SynchronousQueue.)&lt;br/&gt;
+          transport-thread (future (try&lt;br/&gt;
+                                (while true&lt;br/&gt;
+                                  (.put read-queue (read)))&lt;br/&gt;
+                                (catch Throwable t&lt;br/&gt;
+                                  (.put read-queue t))))]&lt;br/&gt;
       (FnTransport.&lt;br/&gt;
         (let &lt;span class=&quot;error&quot;&gt;&amp;#91;failure (atom nil)&amp;#93;&lt;/span&gt;&lt;br/&gt;
           #(if @failure&lt;br/&gt;
@@ -51,7 +51,7 @@&lt;br/&gt;
                  (do (reset! failure msg) (throw msg))&lt;br/&gt;
                  msg))))&lt;br/&gt;
         write&lt;/li&gt;
	&lt;li&gt;close))))&lt;br/&gt;
+        (fn [] (close)(future-cancel transport-thread))))))&lt;/li&gt;
&lt;/ul&gt;
</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TBENCH-2] Alioth chameneos-redux</title>
                <link>http://dev.clojure.org/jira/browse/TBENCH-2</link>
                <project id="10014" key="TBENCH">test.benchmark</project>
                        <description>&lt;p&gt;Implement chameneos-redux as described at &lt;a href=&quot;http://shootout.alioth.debian.org/&quot;&gt;http://shootout.alioth.debian.org/&lt;/a&gt;. See &lt;a href=&quot;http://dev.clojure.org/display/testbenchmark/Alioth+Benchmarks&quot;&gt;http://dev.clojure.org/display/testbenchmark/Alioth+Benchmarks&lt;/a&gt; for an overview.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14261">TBENCH-2</key>
            <summary>Alioth chameneos-redux</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 29 Oct 2010 05:24:14 -0500</created>
                <updated>Fri, 3 Dec 2010 11:46:43 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="25992" author="stu" created="Fri, 3 Dec 2010 11:46:43 -0600"  >&lt;p&gt;these were assigned to me by accident&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TBENCH-3] Alioth meteor-contest</title>
                <link>http://dev.clojure.org/jira/browse/TBENCH-3</link>
                <project id="10014" key="TBENCH">test.benchmark</project>
                        <description>&lt;p&gt;Implement meteor-contest as described at &lt;a href=&quot;http://shootout.alioth.debian.org/&quot;&gt;http://shootout.alioth.debian.org/&lt;/a&gt;. See &lt;a href=&quot;http://dev.clojure.org/display/testbenchmark/Alioth+Benchmarks&quot;&gt;http://dev.clojure.org/display/testbenchmark/Alioth+Benchmarks&lt;/a&gt; for an overview.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14262">TBENCH-3</key>
            <summary>Alioth meteor-contest</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 29 Oct 2010 05:25:40 -0500</created>
                <updated>Fri, 3 Dec 2010 11:46:43 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="25993" author="stu" created="Fri, 3 Dec 2010 11:46:43 -0600"  >&lt;p&gt;these were assigned to me by accident&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TBENCH-4] Alioth pidigits</title>
                <link>http://dev.clojure.org/jira/browse/TBENCH-4</link>
                <project id="10014" key="TBENCH">test.benchmark</project>
                        <description>&lt;p&gt;Implement pidigits as described at &lt;a href=&quot;http://shootout.alioth.debian.org/&quot;&gt;http://shootout.alioth.debian.org/&lt;/a&gt;. See &lt;a href=&quot;http://dev.clojure.org/display/testbenchmark/Alioth+Benchmarks&quot;&gt;http://dev.clojure.org/display/testbenchmark/Alioth+Benchmarks&lt;/a&gt; for an overview.&lt;/p&gt;</description>
                <environment></environment>
            <key id="14263">TBENCH-4</key>
            <summary>Alioth pidigits</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="stu">Stuart Halloway</reporter>
                        <labels>
                    </labels>
                <created>Fri, 29 Oct 2010 05:26:12 -0500</created>
                <updated>Fri, 3 Dec 2010 11:46:43 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="25994" author="stu" created="Fri, 3 Dec 2010 11:46:43 -0600"  >&lt;p&gt;these were assigned to me by accident&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TBENCH-11] Alioth reverse-complement</title>
                <link>http://dev.clojure.org/jira/browse/TBENCH-11</link>
                <project id="10014" key="TBENCH">test.benchmark</project>
                        <description></description>
                <environment></environment>
            <key id="15136">TBENCH-11</key>
            <summary>Alioth reverse-complement</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="pmbauer">Paul Michael Bauer</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 21 Jan 2012 13:04:47 -0600</created>
                <updated>Mon, 13 Feb 2012 23:27:53 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TBENCH-14] Alioth fannkuch-redux</title>
                <link>http://dev.clojure.org/jira/browse/TBENCH-14</link>
                <project id="10014" key="TBENCH">test.benchmark</project>
                        <description></description>
                <environment></environment>
            <key id="15139">TBENCH-14</key>
            <summary>Alioth fannkuch-redux</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="3" iconUrl="http://dev.clojure.org/jira/images/icons/status_inprogress.gif">In Progress</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="dnolen">David Nolen</assignee>
                                <reporter username="dnolen">David Nolen</reporter>
                        <labels>
                    </labels>
                <created>Sat, 21 Jan 2012 13:09:04 -0600</created>
                <updated>Sun, 22 Jan 2012 13:25:25 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TBENCH-16] Add performance testing for STM</title>
                <link>http://dev.clojure.org/jira/browse/TBENCH-16</link>
                <project id="10014" key="TBENCH">test.benchmark</project>
                        <description>&lt;p&gt;Write a test-suite to detect regressions in STM performance.&lt;/p&gt;
</description>
                <environment>64bit Linux, Quad-core</environment>
            <key id="15243">TBENCH-16</key>
            <summary>Add performance testing for STM</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="-1">Unassigned</assignee>
                                <reporter username="ska2342">Stefan Kamphausen</reporter>
                        <labels>
                        <label>performance</label>
                        <label>test</label>
                    </labels>
                <created>Thu, 23 Feb 2012 13:54:51 -0600</created>
                <updated>Thu, 23 Feb 2012 14:38:00 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="27824" author="ska2342" created="Thu, 23 Feb 2012 14:38:00 -0600"  >&lt;p&gt;Patch which adds an stm-namespace containing a collection of performance test functions.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="10950" name="stm-perf-TBENCH-16.diff" size="22418" author="ska2342" created="Thu, 23 Feb 2012 14:38:00 -0600" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TCLI-2] Allow caller-supplied parse-fn</title>
                <link>http://dev.clojure.org/jira/browse/TCLI-2</link>
                <project id="10082" key="TCLI">tools.cli</project>
                        <description>&lt;p&gt;As for :parse-fn, a function can be supplied, this&lt;br/&gt;
is useful for standard use-cases such as: -vv, or when&lt;br/&gt;
you want to build a list from values.&lt;/p&gt;

&lt;p&gt;PR: &lt;a href=&quot;https://github.com/clojure/tools.cli/pull/11&quot;&gt;https://github.com/clojure/tools.cli/pull/11&lt;/a&gt;&lt;/p&gt;</description>
                <environment></environment>
            <key id="15821">TCLI-2</key>
            <summary>Allow caller-supplied parse-fn</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="gar3thjon3s">Gareth Jones</assignee>
                                <reporter username="pyr">Pierre-Yves Ritschard</reporter>
                        <labels>
                        <label>enhancement</label>
                    </labels>
                <created>Sun, 11 Nov 2012 05:31:25 -0600</created>
                <updated>Thu, 11 Apr 2013 09:48:37 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29930" author="jafingerhut" created="Sun, 11 Nov 2012 12:38:17 -0600"  >&lt;p&gt;Pierre-Yves, there are instructions for creating patches under the headings &quot;Development&quot; and &quot;Adding patches&quot; on this page: &lt;a href=&quot;http://dev.clojure.org/display/design/JIRA+workflow&quot;&gt;http://dev.clojure.org/display/design/JIRA+workflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Submissions to this module do require the author to sign a CA.  Instructions here: &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt;&lt;/p&gt;</comment>
                    <comment id="30926" author="pyr" created="Thu, 11 Apr 2013 09:48:06 -0500"  >&lt;p&gt;Suggested Patch&lt;/p&gt;</comment>
                    <comment id="30927" author="pyr" created="Thu, 11 Apr 2013 09:48:37 -0500"  >&lt;p&gt;Hello, now that I&apos;m a registered contributor, I attached a file as suggested in the workflow wiki&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11952" name="TCLI-2.diff" size="2868" author="pyr" created="Thu, 11 Apr 2013 09:48:06 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TGEN-4] Typo in defspec docstring</title>
                <link>http://dev.clojure.org/jira/browse/TGEN-4</link>
                <project id="10081" key="TGEN">test.generative</project>
                        <description>&lt;p&gt;The docstring for `defspec` misspells &quot;metdata&quot;.&lt;/p&gt;</description>
                <environment></environment>
            <key id="16077">TGEN-4</key>
            <summary>Typo in defspec docstring</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="5" iconUrl="http://dev.clojure.org/jira/images/icons/priority_trivial.gif">Trivial</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stu">Stuart Halloway</assignee>
                                <reporter username="ambrosebs">Ambrose Bonnaire-Sergeant</reporter>
                        <labels>
                    </labels>
                <created>Mon, 11 Mar 2013 12:31:55 -0500</created>
                <updated>Mon, 11 Mar 2013 12:31:55 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TLOG-9] spy macro (or new spy macro) that accepts a message</title>
                <link>http://dev.clojure.org/jira/browse/TLOG-9</link>
                <project id="10030" key="TLOG">tools.logging</project>
                        <description>&lt;p&gt;I think it might be useful to have spy be able to take a message to be logged in addition to the data. (or have a similar macro showing an optional message instead of the code).&lt;/p&gt;

&lt;p&gt;(spy &quot;doing x&quot; (blah))&lt;br/&gt;
(spy :doing-x (blah) ; because it is easier to type sometimes&lt;/p&gt;

&lt;p&gt;with spy this may conflict with the log-level. &lt;/p&gt;

&lt;p&gt;I find this sort of function with a message useful and use it quite often. Much more often than plain logging. Generally - I would&apos;t log the code unless it logged file and line number too.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15876">TLOG-9</key>
            <summary>spy macro (or new spy macro) that accepts a message</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ataggart">Alexander Taggart</assignee>
                                <reporter username="davesann">Dave Sann</reporter>
                        <labels>
                    </labels>
                <created>Sat, 8 Dec 2012 23:18:41 -0600</created>
                <updated>Sat, 8 Dec 2012 23:18:41 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TLOG-12] Reflection Warnings when using tools.logging</title>
                <link>http://dev.clojure.org/jira/browse/TLOG-12</link>
                <project id="10030" key="TLOG">tools.logging</project>
                        <description>&lt;p&gt;A few of my projects are still reflecting using tools.logging 0.2.6 and slf4j-log4j12 &quot;1.7.2&quot;.&lt;/p&gt;

&lt;p&gt;lein check produces the following output:&lt;/p&gt;

&lt;p&gt;...&lt;br/&gt;
Reflection warning, curator_clj/zookeeper.clj:1:1 - reference to field isTraceEnabled can&apos;t be resolved.&lt;br/&gt;
Reflection warning, curator_clj/zookeeper.clj:1:1 - reference to field isDebugEnabled can&apos;t be resolved.&lt;br/&gt;
Reflection warning, curator_clj/zookeeper.clj:1:1 - reference to field isInfoEnabled can&apos;t be resolved.&lt;br/&gt;
Reflection warning, curator_clj/zookeeper.clj:1:1 - reference to field isWarnEnabled can&apos;t be resolved.&lt;br/&gt;
Reflection warning, curator_clj/zookeeper.clj:1:1 - reference to field isErrorEnabled can&apos;t be resolved.&lt;br/&gt;
Reflection warning, curator_clj/zookeeper.clj:1:1 - reference to field isErrorEnabled can&apos;t be resolved.&lt;br/&gt;
...&lt;/p&gt;</description>
                <environment></environment>
            <key id="16173">TLOG-12</key>
            <summary>Reflection Warnings when using tools.logging</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="ataggart">Alexander Taggart</assignee>
                                <reporter username="beffbernard">Trevor Bernard</reporter>
                        <labels>
                    </labels>
                <created>Tue, 30 Apr 2013 07:09:02 -0500</created>
                <updated>Tue, 30 Apr 2013 17:46:41 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                        <comments>
                    <comment id="31024" author="ataggart" created="Tue, 30 Apr 2013 17:37:07 -0500"  >&lt;p&gt;I&apos;ve made a quick test project: &lt;a href=&quot;https://github.com/ataggart/reflect-log-test&quot;&gt;https://github.com/ataggart/reflect-log-test&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cloning that repo, running &lt;tt&gt;lein check&lt;/tt&gt; yields no reflection warnings.&lt;/p&gt;

&lt;p&gt;Please provide a way for me to reproduce what you see.&lt;/p&gt;
</comment>
                    <comment id="31026" author="beffbernard" created="Tue, 30 Apr 2013 17:46:41 -0500"  >&lt;p&gt;Forking that project and will try to find a simple test case that reproduces it.&lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11975" name="0001-Fix-TLOG-7-Remove-reflection-warnings.patch" size="14082" author="beffbernard" created="Tue, 30 Apr 2013 07:09:02 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                        <customfield id="customfield_10003" key="com.atlassian.jira.plugin.system.customfieldtypes:userpicker">
                <customfieldname>Waiting On</customfieldname>
                <customfieldvalues>
                    <customfieldvalue>beffbernard</customfieldvalue>
                </customfieldvalues>
            </customfield>
                            </customfields>
    </item>

<item>
            <title>[TMACRO-1] Preserve metadata for (at least) unexpanded forms</title>
                <link>http://dev.clojure.org/jira/browse/TMACRO-1</link>
                <project id="10083" key="TMACRO">tools.macro</project>
                        <description>&lt;p&gt;In algo.monads:&lt;/p&gt;

&lt;p&gt;(with-monad blah some-code...)&lt;/p&gt;

&lt;p&gt;causes all of some-code to report as being on the line of the with-monad form.  Could, perhaps, expand-all copy over metadata from the original form, at least in the common case that the form-at-point was not itself expanded?&lt;/p&gt;</description>
                <environment>Clojure 1.3.0, tools.macro 0.1.1, algo.monads 0.1.0</environment>
            <key id="15313">TMACRO-1</key>
            <summary>Preserve metadata for (at least) unexpanded forms</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="khinsen">Konrad Hinsen</assignee>
                                <reporter username="s11001001">Stephen Compall</reporter>
                        <labels>
                    </labels>
                <created>Mon, 2 Apr 2012 18:04:31 -0500</created>
                <updated>Mon, 2 Apr 2012 18:04:31 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TNS-5] Allow any valid .clj* source file to be parsed/analysed</title>
                <link>http://dev.clojure.org/jira/browse/TNS-5</link>
                <project id="10052" key="TNS">tools.namespace</project>
                        <description>&lt;p&gt;This broadens the allowed file types to anything ending with #&quot;\.clj.?$&quot;, meaning this would work for clj, cljs, cljc, cljx and possibly other Clojure implementations with their own extension in the future. &lt;/p&gt;

&lt;p&gt;This allows libraries such as codox (and possibly autodoc) to work with ClojureScript and others implementations without any modification.&lt;/p&gt;

&lt;p&gt;Note: My CA is on the way, I sent it a week ago, I am not sure if it arrived yet (it was sent from Switzerland with normal mail, with an ETA of 1 week).&lt;/p&gt;</description>
                <environment></environment>
            <key id="15810">TNS-5</key>
            <summary>Allow any valid .clj* source file to be parsed/analysed</summary>
                <type id="4" iconUrl="http://dev.clojure.org/jira/images/icons/improvement.gif">Enhancement</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="mpenet">Max Penet</reporter>
                        <labels>
                        <label>enhancement</label>
                    </labels>
                <created>Thu, 1 Nov 2012 15:30:08 -0500</created>
                <updated>Thu, 13 Dec 2012 02:40:21 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="29888" author="mpenet" created="Fri, 2 Nov 2012 06:51:22 -0500"  >&lt;p&gt;CA received it seems (I am listed on &lt;a href=&quot;http://clojure.org/contributing&quot;&gt;http://clojure.org/contributing&lt;/a&gt; ).&lt;/p&gt;</comment>
                    <comment id="29895" author="stuart.sierra" created="Fri, 2 Nov 2012 15:23:28 -0500"  >&lt;p&gt;I&apos;m not sure about this. If you&apos;re only using c.t.n.find in isolation, it&apos;s fine. But if you&apos;re using code-reloading and c.t.n.repl, it could incorrectly try to reload .cljs files in JVM Clojure.&lt;/p&gt;

&lt;p&gt;We really need &lt;span class=&quot;error&quot;&gt;&amp;#91;Feature Expressions&amp;#93;&lt;/span&gt;&lt;a href=&quot;http://dev.clojure.org/display/design/Feature+Expressions&quot;&gt;http://dev.clojure.org/display/design/Feature+Expressions&lt;/a&gt; or something like it to get away from multiple file extensions.&lt;/p&gt;

&lt;p&gt;Until then, I think it has to be optional. I don&apos;t know how best to achieve this. The APIs in c.t.n.repl and c.t.n.dir are not amenable to extension. I&apos;ll think about it.&lt;/p&gt;</comment>
                    <comment id="29906" author="mpenet" created="Tue, 6 Nov 2012 18:11:05 -0600"  >&lt;p&gt;True, I didn&apos;t realize that. &lt;/p&gt;

&lt;p&gt;Maybe using a dynamic var to hold the regex pattern (or a predicate?) could be a reasonable solution in the meantime, this would allow to rebind it in the case of codox &amp;amp; similar libs.&lt;br/&gt;
I don&apos;t really &quot;like&quot; to use dynamic vars (or regexes!), but in this case it might make sense.&lt;br/&gt;
Not to mention it would also allow more flexibility on projects where you don&apos;t want to have your clj codoxed, but only your cljs for instance.&lt;/p&gt;</comment>
                    <comment id="30026" author="mpenet" created="Sat, 24 Nov 2012 07:47:39 -0600"  >&lt;p&gt;Any thoughts on my last comment/edit? I don&apos;t think there is a single doc lib that works with cljs at the moment, it is a bit painful to be honest.&lt;/p&gt;</comment>
                    <comment id="30027" author="stuart.sierra" created="Sat, 24 Nov 2012 16:25:42 -0600"  >&lt;p&gt;Yes, I think a dynamic var would be OK. However, I would like to know of a real use case, not just a potential one.&lt;/p&gt;</comment>
                    <comment id="30223" author="mpenet" created="Thu, 13 Dec 2012 02:40:21 -0600"  >&lt;p&gt;The idea was to be able to use codox on cljs files, I tried locally but there are other problems with this approach to be able to get to cljs vars metadata. So in the end I think you were right, maybe it&apos;s better to wait for feature expressions for this. &lt;/p&gt;</comment>
                </comments>
                    <attachments>
                    <attachment id="11654" name="e3cd6d1fa6e0c900bc1086e4a93bbc9cb343a820.patch" size="5317" author="mpenet" created="Thu, 1 Nov 2012 15:30:08 -0500" />
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TNS-6] Attempt to reload deleted file</title>
                <link>http://dev.clojure.org/jira/browse/TNS-6</link>
                <project id="10052" key="TNS">tools.namespace</project>
                        <description>&lt;p&gt;I can&apos;t identify the exact circumstances, but I have seen events where a source code file has been deleted but clojure.tools.namespace.repl/refresh still tries to reload it. Because the file doesn&apos;t exist, there&apos;s an exception when you try to load it, so you&apos;re stuck.&lt;/p&gt;</description>
                <environment></environment>
            <key id="15890">TNS-6</key>
            <summary>Attempt to reload deleted file</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Fri, 14 Dec 2012 07:56:01 -0600</created>
                <updated>Fri, 14 Dec 2012 07:56:01 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[TNS-7] Stack overflow on refresh after circular dependency detected</title>
                <link>http://dev.clojure.org/jira/browse/TNS-7</link>
                <project id="10052" key="TNS">tools.namespace</project>
                        <description>&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;user&amp;gt; (refresh)
Exception Circular dependency between com.example.foo and com.example.bar  clojure.tools.namespace.dependency.MapDependencyGraph (dependency.clj:74)
user&amp;gt; (refresh)
StackOverflowError   clojure.lang.PersistentHashMap$BitmapIndexedNode.index (PersistentHashMap.java:576)
user&amp;gt; (clojure.repl/pst)
StackOverflowError 
	clojure.lang.PersistentHashMap$BitmapIndexedNode.index (PersistentHashMap.java:576)
	clojure.lang.PersistentHashMap$BitmapIndexedNode.find (PersistentHashMap.java:676)
	clojure.lang.PersistentHashMap$ArrayNode.find (PersistentHashMap.java:396)
	clojure.lang.PersistentHashMap.valAt (PersistentHashMap.java:152)
	clojure.lang.PersistentHashMap.valAt (PersistentHashMap.java:156)
	clojure.lang.RT.get (RT.java:645)
	clojure.tools.namespace.dependency/transitive (dependency.clj:52)
	clojure.tools.namespace.dependency/transitive/fn--7043 (dependency.clj:51)
	clojure.core.protocols/fn--6022 (protocols.clj:79)
	clojure.core.protocols/fn--5979/G--5974--5992 (protocols.clj:13)
	clojure.core/reduce (core.clj:6177)
	clojure.tools.namespace.dependency/transitive (dependency.clj:52)
nil&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment>tools.namespace 0.2.3</environment>
            <key id="16149">TNS-7</key>
            <summary>Stack overflow on refresh after circular dependency detected</summary>
                <type id="1" iconUrl="http://dev.clojure.org/jira/images/icons/bug.gif">Defect</type>
                                <priority id="4" iconUrl="http://dev.clojure.org/jira/images/icons/priority_minor.gif">Minor</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="stuart.sierra">Stuart Sierra</assignee>
                                <reporter username="stuart.sierra">Stuart Sierra</reporter>
                        <labels>
                    </labels>
                <created>Wed, 17 Apr 2013 10:34:07 -0500</created>
                <updated>Wed, 17 Apr 2013 10:34:07 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                                            </customfields>
    </item>

<item>
            <title>[UNIFY-3] Enhance documentation</title>
                <link>http://dev.clojure.org/jira/browse/UNIFY-3</link>
                <project id="10073" key="UNIFY">core.unify</project>
                        <description>&lt;p&gt;The current unify docs are spartan and &quot;just the facts&quot;.  It would be useful to have a set of docs that:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;explain unification&lt;/li&gt;
	&lt;li&gt;explain the library use cases&lt;/li&gt;
	&lt;li&gt;show a simple example use&lt;/li&gt;
&lt;/ul&gt;

</description>
                <environment></environment>
            <key id="15155">UNIFY-3</key>
            <summary>Enhance documentation</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                        <label>docs</label>
                    </labels>
                <created>Fri, 3 Feb 2012 08:43:25 -0600</created>
                <updated>Fri, 3 Feb 2012 08:43:25 -0600</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>

<item>
            <title>[UNIFY-6] Create tests for k&amp;v map unification</title>
                <link>http://dev.clojure.org/jira/browse/UNIFY-6</link>
                <project id="10073" key="UNIFY">core.unify</project>
                        <description>&lt;p&gt;Substitution in map keys or values should both work.  I doubt there are tests around this.&lt;/p&gt;
</description>
                <environment></environment>
            <key id="15478">UNIFY-6</key>
            <summary>Create tests for k&amp;v map unification</summary>
                <type id="3" iconUrl="http://dev.clojure.org/jira/images/icons/task.gif">Task</type>
                                <priority id="3" iconUrl="http://dev.clojure.org/jira/images/icons/priority_major.gif">Major</priority>
                    <status id="1" iconUrl="http://dev.clojure.org/jira/images/icons/status_open.gif">Open</status>
                    <resolution id="-1">Unresolved</resolution>
                                <assignee username="fogus">Fogus</assignee>
                                <reporter username="fogus">Fogus</reporter>
                        <labels>
                    </labels>
                <created>Fri, 25 May 2012 15:31:30 -0500</created>
                <updated>Fri, 25 May 2012 15:31:30 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>0</watches>
                                <attachments>
                </attachments>
            <subtasks>
        </subtasks>
                <customfields>
                                                                                            <customfield id="customfield_10010" key="com.pyxis.greenhopper.jira:gh-global-rank">
                <customfieldname>Global Rank</customfieldname>
                <customfieldvalues>
                    
                </customfieldvalues>
            </customfield>
                                                                                        </customfields>
    </item>
</channel>
</rss>