<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments for On Clojure</title>
	<atom:link href="http://onclojure.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://onclojure.com</link>
	<description>A blog about everything Clojure</description>
	<lastBuildDate>Wed, 13 Jul 2011 20:11:47 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>Comment on Computing with units and dimensions by Eric Fraga</title>
		<link>http://onclojure.com/2010/03/23/computing-with-units-and-dimensions/#comment-157</link>
		<dc:creator><![CDATA[Eric Fraga]]></dc:creator>
		<pubDate>Wed, 13 Jul 2011 20:11:47 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=115#comment-157</guid>
		<description><![CDATA[Ah, I see!  Sorry I misunderstood your point.  I agree completely that adding conversions between Celsius and Fahrenheit is not worth the effort. So long as Kelvin is there, I&#039;m happy!]]></description>
		<content:encoded><![CDATA[<p>Ah, I see!  Sorry I misunderstood your point.  I agree completely that adding conversions between Celsius and Fahrenheit is not worth the effort. So long as Kelvin is there, I&#8217;m happy!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Computing with units and dimensions by khinsen</title>
		<link>http://onclojure.com/2010/03/23/computing-with-units-and-dimensions/#comment-156</link>
		<dc:creator><![CDATA[khinsen]]></dc:creator>
		<pubDate>Sat, 09 Jul 2011 15:04:32 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=115#comment-156</guid>
		<description><![CDATA[Kelvin is in there, of course, it&#039;s an SI unit after all. Adding Rankin is trivial, as is adding most other units: All it takes is a defunit statement containing the conversion factor to some already known unit combination. What&#039;s not possible without adding lots of code is units whose zero is non-standard, which in practice means Celsius and Fahrenheit.]]></description>
		<content:encoded><![CDATA[<p>Kelvin is in there, of course, it&#8217;s an SI unit after all. Adding Rankin is trivial, as is adding most other units: All it takes is a defunit statement containing the conversion factor to some already known unit combination. What&#8217;s not possible without adding lots of code is units whose zero is non-standard, which in practice means Celsius and Fahrenheit.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Computing with units and dimensions by Eric Fraga</title>
		<link>http://onclojure.com/2010/03/23/computing-with-units-and-dimensions/#comment-155</link>
		<dc:creator><![CDATA[Eric Fraga]]></dc:creator>
		<pubDate>Fri, 08 Jul 2011 18:19:05 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=115#comment-155</guid>
		<description><![CDATA[If I may comment on this: &quot;I don’t think that introducing that amount of complexity is justified, considering that daily-life temperatures are rarely combined in computations with quantities of other dimensions.&quot;:

It is true that working with temperatures can be complex, especially if you allow the use of non-0 based scales like Celsius and Fahrenheit.  However, if you stick to Kelvin (and/or Rankin), there is little complexity.  More to the point, there are plenty of problems that require combining temperatures with other units, especially in chemical engineering and physics problems dealing with heat transport.

I would really appreciate you reconsidering the above, at least adding support for Kelvin (and/or Rankin)!  If I get a chance, and if my Clojure expertise is up to it, I may have a go myself, but I assume it should be trivial for you to do.

Thanks, in any case, for what looks like a great addition to the Clojure-verse!]]></description>
		<content:encoded><![CDATA[<p>If I may comment on this: &#8220;I don’t think that introducing that amount of complexity is justified, considering that daily-life temperatures are rarely combined in computations with quantities of other dimensions.&#8221;:</p>
<p>It is true that working with temperatures can be complex, especially if you allow the use of non-0 based scales like Celsius and Fahrenheit.  However, if you stick to Kelvin (and/or Rankin), there is little complexity.  More to the point, there are plenty of problems that require combining temperatures with other units, especially in chemical engineering and physics problems dealing with heat transport.</p>
<p>I would really appreciate you reconsidering the above, at least adding support for Kelvin (and/or Rankin)!  If I get a chance, and if my Clojure expertise is up to it, I may have a go myself, but I assume it should be trivial for you to do.</p>
<p>Thanks, in any case, for what looks like a great addition to the Clojure-verse!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on dorun, doseq, doall by klang</title>
		<link>http://onclojure.com/2009/03/04/dorun-doseq-doall/#comment-154</link>
		<dc:creator><![CDATA[klang]]></dc:creator>
		<pubDate>Wed, 22 Jun 2011 17:54:08 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=9#comment-154</guid>
		<description><![CDATA[Thank you! 

I had a (doseq .. ) that I wanted to execute in parallel. It was trivial to rewrite it as (dorun (map ….. )) and then simply use pmap instead!]]></description>
		<content:encoded><![CDATA[<p>Thank you! </p>
<p>I had a (doseq .. ) that I wanted to execute in parallel. It was trivial to rewrite it as (dorun (map ….. )) and then simply use pmap instead!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on A monad tutorial for Clojure programmers (part 3) by Kurt Harriger</title>
		<link>http://onclojure.com/2009/03/23/a-monad-tutorial-for-clojure-programmers-part-3/#comment-153</link>
		<dc:creator><![CDATA[Kurt Harriger]]></dc:creator>
		<pubDate>Tue, 21 Dec 2010 17:24:21 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=33#comment-153</guid>
		<description><![CDATA[I too am interested in the monadic implementation of fib.  Basically my understanding is that a lazy sequence is a continuation monad where the head is the current result and tail represents the future computation.

F# uses sequence monads to construct IEnumerable.  As you pointed out there is some compiler magic that rearranges the statements into monadic expressions (http://blogs.msdn.com/b/dsyme/archive/2007/09/22/some-details-on-f-computation-expressions-aka-monadic-or-workflow-syntax.aspx).  In clojure I would assume one could do this same transformation with a macro.  

So back to the question of why?  Although this seems unnecessary in a clojure where lazy sequences accomplish the same thing. I&#039;m still wondering if lazy-seq may be the bridge between, rather than a replacement for, the monadic representation. 

Here is a web application where the author used fill-queue to convert the web server into a sequence generator rather than a event dispatcher.  http://infolace.blogspot.com/2009/08/simple-webhooks-with-clojure-and-ring.html.  

Using the same technique I could write fib in an imperative style.  
(def fib (fill-queue (fn loop [fill] [a 0 b 1] (fill a) (recur b (+ a b)))))

However the above uses another thread which blocks when the queue is full, in some cases this concurrent computation may be desirable, but it probably isn&#039;t desirable to dedicate a thread to each computation.

In F# events can be composed, filtered and mapped just as a sequence of events rather than traditional event handlers (http://codebetter.com/matthewpodwysocki/2009/08/11/first-class-composable-events-in-f/) which makes the code very expressive.  

Here is a clojure web framework that uses a continuation monad to preserve the state of a web application http://intensivesystems.net/tutorials/cont_m_web.html.  In this case continuations rather than separate threads are used to maintain state.  Could this be implemented as a lazy sequence instead?  In F# asynchronous workflows are also implemented via monads.  Some C# developers are using IEnumerable and linq to develop async workflows (http://tomasp.net/blog/csharp-async.aspx). So I think the answer is yes, but the real question I think is would using a lazy sequence make the code easier or more difficult to understand, write and maintain?  

I think applications might be written as async workflows, and instead of using event handlers they pull a sequence of events and maintain state between events in local variables (sate monad).  This would have the feel of stdin/stdout in unix, but rather than the workflow blocking on output and requiring a dedicated thread a continuation could be used to externalize the choice of threading model.]]></description>
		<content:encoded><![CDATA[<p>I too am interested in the monadic implementation of fib.  Basically my understanding is that a lazy sequence is a continuation monad where the head is the current result and tail represents the future computation.</p>
<p>F# uses sequence monads to construct IEnumerable.  As you pointed out there is some compiler magic that rearranges the statements into monadic expressions (<a href="http://blogs.msdn.com/b/dsyme/archive/2007/09/22/some-details-on-f-computation-expressions-aka-monadic-or-workflow-syntax.aspx" rel="nofollow">http://blogs.msdn.com/b/dsyme/archive/2007/09/22/some-details-on-f-computation-expressions-aka-monadic-or-workflow-syntax.aspx</a>).  In clojure I would assume one could do this same transformation with a macro.  </p>
<p>So back to the question of why?  Although this seems unnecessary in a clojure where lazy sequences accomplish the same thing. I&#8217;m still wondering if lazy-seq may be the bridge between, rather than a replacement for, the monadic representation. </p>
<p>Here is a web application where the author used fill-queue to convert the web server into a sequence generator rather than a event dispatcher.  <a href="http://infolace.blogspot.com/2009/08/simple-webhooks-with-clojure-and-ring.html" rel="nofollow">http://infolace.blogspot.com/2009/08/simple-webhooks-with-clojure-and-ring.html</a>.  </p>
<p>Using the same technique I could write fib in an imperative style.<br />
(def fib (fill-queue (fn loop [fill] [a 0 b 1] (fill a) (recur b (+ a b)))))</p>
<p>However the above uses another thread which blocks when the queue is full, in some cases this concurrent computation may be desirable, but it probably isn&#8217;t desirable to dedicate a thread to each computation.</p>
<p>In F# events can be composed, filtered and mapped just as a sequence of events rather than traditional event handlers (<a href="http://codebetter.com/matthewpodwysocki/2009/08/11/first-class-composable-events-in-f/" rel="nofollow">http://codebetter.com/matthewpodwysocki/2009/08/11/first-class-composable-events-in-f/</a>) which makes the code very expressive.  </p>
<p>Here is a clojure web framework that uses a continuation monad to preserve the state of a web application <a href="http://intensivesystems.net/tutorials/cont_m_web.html" rel="nofollow">http://intensivesystems.net/tutorials/cont_m_web.html</a>.  In this case continuations rather than separate threads are used to maintain state.  Could this be implemented as a lazy sequence instead?  In F# asynchronous workflows are also implemented via monads.  Some C# developers are using IEnumerable and linq to develop async workflows (<a href="http://tomasp.net/blog/csharp-async.aspx" rel="nofollow">http://tomasp.net/blog/csharp-async.aspx</a>). So I think the answer is yes, but the real question I think is would using a lazy sequence make the code easier or more difficult to understand, write and maintain?  </p>
<p>I think applications might be written as async workflows, and instead of using event handlers they pull a sequence of events and maintain state between events in local variables (sate monad).  This would have the feel of stdin/stdout in unix, but rather than the workflow blocking on output and requiring a dedicated thread a continuation could be used to externalize the choice of threading model.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Protecting mutable state in the state monad by khinsen</title>
		<link>http://onclojure.com/2009/06/24/protecting-mutable-state-in-the-state-monad/#comment-140</link>
		<dc:creator><![CDATA[khinsen]]></dc:creator>
		<pubDate>Fri, 29 Oct 2010 12:40:05 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=73#comment-140</guid>
		<description><![CDATA[The need to exclude write in Clojure 1.2 and later is an example of what I consider a design fault in Clojure&#039;s namespace handling: new symbols that get added to clojure.core break existing code that use the same symbols otherwise. I hope this will be fixed in the future.]]></description>
		<content:encoded><![CDATA[<p>The need to exclude write in Clojure 1.2 and later is an example of what I consider a design fault in Clojure&#8217;s namespace handling: new symbols that get added to clojure.core break existing code that use the same symbols otherwise. I hope this will be fixed in the future.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on A monad tutorial for Clojure programmers (part 3) by khinsen</title>
		<link>http://onclojure.com/2009/03/23/a-monad-tutorial-for-clojure-programmers-part-3/#comment-139</link>
		<dc:creator><![CDATA[khinsen]]></dc:creator>
		<pubDate>Fri, 29 Oct 2010 12:37:24 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=33#comment-139</guid>
		<description><![CDATA[The typos are fixed. Thanks for the feedback! Unfortunately all my applications are either throwaway code (not very presentable) or somewhat confidential.]]></description>
		<content:encoded><![CDATA[<p>The typos are fixed. Thanks for the feedback! Unfortunately all my applications are either throwaway code (not very presentable) or somewhat confidential.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Protecting mutable state in the state monad by jaceklaskowski</title>
		<link>http://onclojure.com/2009/06/24/protecting-mutable-state-in-the-state-monad/#comment-138</link>
		<dc:creator><![CDATA[jaceklaskowski]]></dc:creator>
		<pubDate>Fri, 29 Oct 2010 12:23:20 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=73#comment-138</guid>
		<description><![CDATA[Hi,

I really liked this and the other blog entries about monads to let me understand the concept w/ Clojure. Thanks.

To run the sample, I had to exclude write of clojure.contrib.monadic-io-streams. It&#039;s w/ Clojure 1.2 and 1.3.0-alpha2.

(:use [clojure.contrib.monadic-io-streams :exclude (write)])

Jacek]]></description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>I really liked this and the other blog entries about monads to let me understand the concept w/ Clojure. Thanks.</p>
<p>To run the sample, I had to exclude write of clojure.contrib.monadic-io-streams. It&#8217;s w/ Clojure 1.2 and 1.3.0-alpha2.</p>
<p>(:use [clojure.contrib.monadic-io-streams :exclude (write)])</p>
<p>Jacek</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on A monad tutorial for Clojure programmers (part 3) by Jacek Laskowski</title>
		<link>http://onclojure.com/2009/03/23/a-monad-tutorial-for-clojure-programmers-part-3/#comment-137</link>
		<dc:creator><![CDATA[Jacek Laskowski]]></dc:creator>
		<pubDate>Thu, 28 Oct 2010 10:50:47 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=33#comment-137</guid>
		<description><![CDATA[Read it again and spot 2 typos:

&lt;i&gt;rest of to the domonad form&lt;/i&gt; should become &lt;i&gt;rest of the domonad form&lt;/i&gt; (&#039;to&#039; removed)

&lt;i&gt;used that is has itself&lt;/i&gt; should become &lt;i&gt;used that has itself&lt;/i&gt; (&#039;is&#039; removed)

Thanks for the article and the others! They&#039;re very mind-blowing and simply awesome. I wish you&#039;d share when/how you used the library so I&#039;d follow along and understand monads better.]]></description>
		<content:encoded><![CDATA[<p>Read it again and spot 2 typos:</p>
<p><i>rest of to the domonad form</i> should become <i>rest of the domonad form</i> (&#8216;to&#8217; removed)</p>
<p><i>used that is has itself</i> should become <i>used that has itself</i> (&#8216;is&#8217; removed)</p>
<p>Thanks for the article and the others! They&#8217;re very mind-blowing and simply awesome. I wish you&#8217;d share when/how you used the library so I&#8217;d follow along and understand monads better.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on A monad tutorial for Clojure programmers (part 3) by Jacek Laskowski</title>
		<link>http://onclojure.com/2009/03/23/a-monad-tutorial-for-clojure-programmers-part-3/#comment-136</link>
		<dc:creator><![CDATA[Jacek Laskowski]]></dc:creator>
		<pubDate>Mon, 18 Oct 2010 12:05:18 +0000</pubDate>
		<guid isPermaLink="false">http://onclojure.com/?p=33#comment-136</guid>
		<description><![CDATA[Just noticed - shouldn&#039;t 

(domonad sequence
  [a (range 5)
   :when (odd? a)]
  (* 2 a))

use sequence-m?]]></description>
		<content:encoded><![CDATA[<p>Just noticed &#8211; shouldn&#8217;t </p>
<p>(domonad sequence<br />
  [a (range 5)<br />
   :when (odd? a)]<br />
  (* 2 a))</p>
<p>use sequence-m?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

