<?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 on: Iteratees and a (very) Minimal Model of Shared-State Concurrency</title>
	<atom:link href="http://blog.melding-monads.com/2010/07/21/iteratees-and-a-very-minimal-model-of-shared-state-concurrency/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.melding-monads.com/2010/07/21/iteratees-and-a-very-minimal-model-of-shared-state-concurrency/</link>
	<description>Math, Computer Science,  and Education</description>
	<lastBuildDate>Wed, 08 May 2013 14:59:04 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Aycan iRiCAN</title>
		<link>http://blog.melding-monads.com/2010/07/21/iteratees-and-a-very-minimal-model-of-shared-state-concurrency/#comment-95</link>
		<dc:creator><![CDATA[Aycan iRiCAN]]></dc:creator>
		<pubDate>Thu, 22 Jul 2010 12:20:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.melding-monads.com/?p=287#comment-95</guid>
		<description><![CDATA[take a look at IterateeMCPS by Oleg.]]></description>
		<content:encoded><![CDATA[<p>take a look at IterateeMCPS by Oleg.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Heinrich Apfelmus</title>
		<link>http://blog.melding-monads.com/2010/07/21/iteratees-and-a-very-minimal-model-of-shared-state-concurrency/#comment-94</link>
		<dc:creator><![CDATA[Heinrich Apfelmus]]></dc:creator>
		<pubDate>Thu, 22 Jul 2010 11:23:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.melding-monads.com/?p=287#comment-94</guid>
		<description><![CDATA[I think that iteratees are too ad-hoc for this problem of defining a monad with custom semantics. A more general and conceptually simpler method is to implement the operational semantics directly, for example along the lines of my &quot;Operational Monad Tutorial&quot;.

Two demonstrations of this operational style that involve scheduling are &lt;a href=&quot;http://projects.haskell.org/operational/examples/PoorMansConcurrency.hs.html&quot; rel=&quot;nofollow&quot;&gt;Poor Man&#039;s Concurrency Monad&lt;/a&gt; and a &lt;a href=&quot;http://projects.haskell.org/operational/examples/TicTacToe.hs.html&quot; rel=&quot;nofollow&quot;&gt;aTicTacToe implementation&lt;/a&gt;. See the &lt;a href=&quot;http://projects.haskell.org/operational&quot; rel=&quot;nofollow&quot;&gt;project web site&lt;/a&gt; for more examples.]]></description>
		<content:encoded><![CDATA[<p>I think that iteratees are too ad-hoc for this problem of defining a monad with custom semantics. A more general and conceptually simpler method is to implement the operational semantics directly, for example along the lines of my &#8220;Operational Monad Tutorial&#8221;.</p>
<p>Two demonstrations of this operational style that involve scheduling are <a href="http://projects.haskell.org/operational/examples/PoorMansConcurrency.hs.html" rel="nofollow">Poor Man&#8217;s Concurrency Monad</a> and a <a href="http://projects.haskell.org/operational/examples/TicTacToe.hs.html" rel="nofollow">aTicTacToe implementation</a>. See the <a href="http://projects.haskell.org/operational" rel="nofollow">project web site</a> for more examples.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeremy Shaw</title>
		<link>http://blog.melding-monads.com/2010/07/21/iteratees-and-a-very-minimal-model-of-shared-state-concurrency/#comment-92</link>
		<dc:creator><![CDATA[Jeremy Shaw]]></dc:creator>
		<pubDate>Thu, 22 Jul 2010 00:49:16 +0000</pubDate>
		<guid isPermaLink="false">http://blog.melding-monads.com/?p=287#comment-92</guid>
		<description><![CDATA[Great stuff! These concepts are being used in the latest version of sendfile and happstack now.

You can see my write-up on how it is used in sendfile here,

http://happstack.blogspot.com/2010/07/sendfile-071.html

I would love to hear what you have to say about it. 

For sendfile, the library provides a &#039;recursive&#039; function, but the user needs to be able to do some stuff between each recursion. The user of sendfile library cares about controlling when the function is resumed, and working with the intermediate values. But it does not want to know about the internals of the sendfile function or what data needs to be propogated from one call to the next. The Iter provides a great way of doing this. (And allows us to hide the fact that the data which needs to be propogated is platform dependent).

In happstack, it used so that users can provide functions which process the contents of multipart/form-data and impose quotas, and decide if a value should be stored in RAM or saved on the disk. And, it needs to be able to do it in &#039;constant&#039; space. I have not documented this feature in detail yet but you can see the code here:

http://patch-tag.com/r/mae/happstack/snapshot/current/content/pretty/happstack-server/src/Happstack/Server/HTTP/Multipart.hs

Search for InputIter.

In this case, the user provides the function that does the work, but the happstack library needs to do things in-between recursions.  But the &#039;private&#039; data which needs to be passed each recursion can be different for different functions. Once again the Iter allows those differences to be wrapped up and hidden. But this time it is so that the library code can avoid having to know the inner details and can work with them in a generic manner.

I still hope to apply the concepts to IxSet so that you can store the keys in RAM, the the values on disk. Haven&#039;t looked at that in detail yet though.

thanks!
- jeremy]]></description>
		<content:encoded><![CDATA[<p>Great stuff! These concepts are being used in the latest version of sendfile and happstack now.</p>
<p>You can see my write-up on how it is used in sendfile here,</p>
<p><a href="http://happstack.blogspot.com/2010/07/sendfile-071.html" rel="nofollow">http://happstack.blogspot.com/2010/07/sendfile-071.html</a></p>
<p>I would love to hear what you have to say about it. </p>
<p>For sendfile, the library provides a &#8216;recursive&#8217; function, but the user needs to be able to do some stuff between each recursion. The user of sendfile library cares about controlling when the function is resumed, and working with the intermediate values. But it does not want to know about the internals of the sendfile function or what data needs to be propogated from one call to the next. The Iter provides a great way of doing this. (And allows us to hide the fact that the data which needs to be propogated is platform dependent).</p>
<p>In happstack, it used so that users can provide functions which process the contents of multipart/form-data and impose quotas, and decide if a value should be stored in RAM or saved on the disk. And, it needs to be able to do it in &#8216;constant&#8217; space. I have not documented this feature in detail yet but you can see the code here:</p>
<p><a href="http://patch-tag.com/r/mae/happstack/snapshot/current/content/pretty/happstack-server/src/Happstack/Server/HTTP/Multipart.hs" rel="nofollow">http://patch-tag.com/r/mae/happstack/snapshot/current/content/pretty/happstack-server/src/Happstack/Server/HTTP/Multipart.hs</a></p>
<p>Search for InputIter.</p>
<p>In this case, the user provides the function that does the work, but the happstack library needs to do things in-between recursions.  But the &#8216;private&#8217; data which needs to be passed each recursion can be different for different functions. Once again the Iter allows those differences to be wrapped up and hidden. But this time it is so that the library code can avoid having to know the inner details and can work with them in a generic manner.</p>
<p>I still hope to apply the concepts to IxSet so that you can store the keys in RAM, the the values on disk. Haven&#8217;t looked at that in detail yet though.</p>
<p>thanks!<br />
- jeremy</p>
]]></content:encoded>
	</item>
</channel>
</rss>
