<!--
RSS generated by JIRA (4.4#649-r158309) at Wed Jun 19 14:14:38 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/temp/SearchRequest.xml?jqlQuery=project+%3D+ALGOM&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>Clojure JIRA</title>
        <link>http://dev.clojure.org/jira/secure/IssueNavigator.jspa?reset=true&amp;jqlQuery=project+%3D+ALGOM</link>
        <description>An XML representation of a search request</description>
                <language>en-us</language>
                        <issue start="0" end="10" total="10"/>
                <build-info>
            <version>4.4</version>
            <build-number>649</build-number>
            <build-date>25-07-2011</build-date>
        </build-info>
<item>
            <title>[ALGOM-10] :when clause in domonad relies on optional m-zero monad operation</title>
                <link>http://dev.clojure.org/jira/browse/ALGOM-10</link>
                <project id="10072" key="ALGOM">algo.monads</project>
                        <description>&lt;p&gt;In &lt;tt&gt;add-monad-step&lt;/tt&gt;, the &lt;tt&gt;:when&lt;/tt&gt; clause is implemented by this line:&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;(identical? bform :when)  `(&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; ~expr ~mexpr ~&apos;m-zero)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;which makes sense, except that &lt;tt&gt;m-zero&lt;/tt&gt; is an optional operation for monads.&lt;br/&gt;
If &lt;tt&gt;:when&lt;/tt&gt; is used with a monad that does not provide an &lt;tt&gt;m-zero&lt;/tt&gt; operation, &lt;br/&gt;
the result (in cases where the condition evaluates to false) is an incorrect monadic value,&lt;br/&gt;
and strange, difficult-to-understand errors result.&lt;/p&gt;

&lt;p&gt;I don&apos;t know that it&apos;s possible to make this work reasonably for all monads,&lt;br/&gt;
but at the very least the limitation should be documented, and ideally the use of &lt;tt&gt;:when&lt;/tt&gt;&lt;br/&gt;
with a monad that does not define &lt;tt&gt;m-zero&lt;/tt&gt; should issue a warning with a recommendation that&lt;br/&gt;
{:if :then :else} should be used instead.d&lt;/p&gt;</description>
                <environment></environment>
            <key id="16210">ALGOM-10</key>
            <summary>:when clause in domonad relies on optional m-zero monad operation</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="glv">Glenn Vanderburg</reporter>
                        <labels>
                    </labels>
                <created>Thu, 30 May 2013 01:36:47 -0500</created>
                <updated>Mon, 3 Jun 2013 08:23:15 -0500</updated>
                                                                            <due></due>
                    <votes>0</votes>
                        <watches>1</watches>
                        <comments>
                    <comment id="31206" author="glv" created="Mon, 3 Jun 2013 08:23:15 -0500"  >&lt;p&gt;After more thinking, I think the best behavior would be to evaluate to &lt;tt&gt;m-zero&lt;/tt&gt; if it&apos;s defined, and &lt;tt&gt;(m-result nil)&lt;/tt&gt; otherwise. The behavior of &lt;tt&gt;:when&lt;/tt&gt; is too useful with the state monad, and too cumbersome to duplicate with &lt;tt&gt;:if :then :else&lt;/tt&gt;, to simply document the issue. The standard Clojure &lt;tt&gt;when&lt;/tt&gt; macro evaluates to nil if the condition is false.&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-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>[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-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>Fri, 7 Jun 2013 20:51:04 -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>
                    <comment id="31225" author="bltavares" created="Fri, 7 Jun 2013 20:51:04 -0500"  >&lt;p&gt;I don&apos;t think this would be a valid example.&lt;/p&gt;

&lt;p&gt;Here is an example in Haskell&lt;br/&gt;
Nothing &amp;gt;&amp;gt;= \x -&amp;gt; Just(x / 0) &amp;#8211; =&amp;gt; Nothing&lt;/p&gt;

&lt;p&gt;; Clojure example&lt;br/&gt;
(with-monad maybe-m (m-bind m-zero #(/ % 0))) ; =&amp;gt; nil&lt;br/&gt;
(with-monad maybe-m (= m-zero nil)) ; =&amp;gt; true&lt;/p&gt;

&lt;p&gt;;; Both examples will fail&lt;br/&gt;
(with-monad maybe-m (#(/ % 0) m-zero))&lt;br/&gt;
(with-monad maybe-m ((comp m-result #(/ % 0)) m-zero))&lt;/p&gt;


&lt;p&gt;Those errors would not be possible to happen with Haskell&apos;s type system.&lt;/p&gt;

&lt;p&gt;The following snippet shows it evaluates properly the monadic bind law for valid operations&lt;/p&gt;

&lt;p&gt;(let [value 1&lt;br/&gt;
      operation #(+ % 1)]&lt;br/&gt;
  (with-monad maybe-m&lt;br/&gt;
    (= &lt;br/&gt;
     (m-bind (m-result value) operation)&lt;br/&gt;
     (operation value))))&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-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-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-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-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-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>
</channel>
</rss>