<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-11295132.post7531218329312814569..comments</id><updated>2009-11-24T07:12:08.522-08:00</updated><title type='text'>Comments on A Neighborhood of Infinity: Haskell Monoids and their Uses</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.sigfpe.com/feeds/7531218329312814569/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default?start-index=26&amp;max-results=25'/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11295132.post-5721273125595698107</id><published>2009-11-24T02:57:21.609-08:00</published><updated>2009-11-24T02:57:21.609-08:00</updated><title type='text'>@ Qrilka

&gt; And also why are you talking about sig...</title><content type='html'>@ Qrilka&lt;br /&gt;&lt;br /&gt;&amp;gt; And also why are you talking about signatures and adding/pulling out elements? The lists are immutable here I think. Am I wrong?&lt;br /&gt;&lt;br /&gt;That was just an abuse of language. But saying &amp;quot;producing a result which is the addition/removal of elements of the original list&amp;quot; would sound a bit cumbersome.&lt;br /&gt;&lt;br /&gt;Note that the exact same abuse of language is made when we are talking about mutable variables: when you &amp;quot;change&amp;quot; a variable, you actually replace the value it contains by another value. The variable itself, as a container, didn&amp;#39;t really change.  And the value that was previously in it certainly didn&amp;#39;t changed at all. You just lost one reference to it.&lt;br /&gt;&lt;br /&gt;Anyway, &lt;a href="http://www.loup-vaillant.fr/articles/assignment" rel="nofollow" rel="nofollow"&gt;assingment is evil&lt;/a&gt;, so…</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/5721273125595698107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/5721273125595698107'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1259060241609#c5721273125595698107' title=''/><author><name>Loup Vaillant</name><uri>http://www.loup-vaillant.fr</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7217888667810962471</id><published>2009-07-20T23:46:34.994-07:00</published><updated>2009-07-20T23:46:34.994-07:00</updated><title type='text'>So we finished 1st ussue of our journal and your a...</title><content type='html'>So we finished 1st ussue of our journal and your article is in it - http://fprog.ru/2009/issue1/&lt;br /&gt;(Not sure if you can read Russian though)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7217888667810962471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7217888667810962471'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1248158794994#c7217888667810962471' title=''/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-8280130450403069869</id><published>2009-05-09T04:38:00.000-07:00</published><updated>2009-05-09T04:38:00.000-07:00</updated><title type='text'>And also why are you talking about signatures and ...</title><content type='html'>And also why are you talking about signatures and adding/pulling out elements? The lists are immutable here I think. Am I wrong?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/8280130450403069869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/8280130450403069869'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1241869080000#c8280130450403069869' title=''/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7365934895068785249</id><published>2009-05-05T11:27:00.000-07:00</published><updated>2009-05-05T11:27:00.000-07:00</updated><title type='text'>BTW "to combine [] with any list leaves gives you ...</title><content type='html'>BTW "to combine [] with any list leaves gives you back" maybe "leaves" is unnecessary here?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7365934895068785249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7365934895068785249'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1241548020000#c7365934895068785249' title=''/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7834161984838594655</id><published>2009-05-03T07:22:00.000-07:00</published><updated>2009-05-03T07:22:00.000-07:00</updated><title type='text'>Qrilka,

Feel free to make a translation. Link bac...</title><content type='html'>Qrilka,&lt;br /&gt;&lt;br /&gt;Feel free to make a translation. Link back here and maybe put a link here pointing to the translation.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7834161984838594655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7834161984838594655'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1241360520000#c7834161984838594655' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09401818062305273147'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-2810611954959669726</id><published>2009-05-03T00:12:00.000-07:00</published><updated>2009-05-03T00:12:00.000-07:00</updated><title type='text'>Dan, I want to translate your post to russian and ...</title><content type='html'>Dan, I want to translate your post to russian and publish (linking to the original text). Do I need make any additional steps from copyright point of view?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/2810611954959669726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/2810611954959669726'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1241334720000#c2810611954959669726' title=''/><author><name>Qrilka</name><uri>http://www.blogger.com/profile/14856370078919907461</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-6808636339223707350</id><published>2009-04-14T14:03:00.000-07:00</published><updated>2009-04-14T14:03:00.000-07:00</updated><title type='text'>Great post. One minor note:

(Monoid a) =&gt; a -&gt; b
...</title><content type='html'>Great post. One minor note:&lt;br /&gt;&lt;br /&gt;(Monoid a) =&amp;gt; a -&amp;gt; b&lt;br /&gt;should be&lt;br /&gt;(Monoid a) =&amp;gt; a -&amp;gt; a&lt;br /&gt;&lt;br /&gt;otherwise there is no way the monoid could be changed and a the eval unsafe cast avoided.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/6808636339223707350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/6808636339223707350'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1239742980000#c6808636339223707350' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-8989014702615512362</id><published>2009-04-11T20:19:00.000-07:00</published><updated>2009-04-11T20:19:00.000-07:00</updated><title type='text'>As much as everyone else has said this: great arti...</title><content type='html'>As much as everyone else has said this: great article. I'm relatively new to Haskell and this was completely readable.&lt;BR/&gt;&lt;BR/&gt;Thank you for sharing!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/8989014702615512362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/8989014702615512362'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1239506340000#c8989014702615512362' title=''/><author><name>johnbender</name><uri>http://www.blogger.com/profile/08425435755112948327</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-4852969683482904577</id><published>2009-02-21T01:24:00.000-08:00</published><updated>2009-02-21T01:24:00.000-08:00</updated><title type='text'>Thank you for an informative and approachable post...</title><content type='html'>Thank you for an informative and approachable post. The things about Writer was especially helpful for a problem in Haskell that I've been mulling over.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/4852969683482904577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/4852969683482904577'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1235208240000#c4852969683482904577' title=''/><author><name>Carl Masak</name><uri>http://masak.org/carl</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7641229007820063972</id><published>2009-02-05T09:45:00.000-08:00</published><updated>2009-02-05T09:45:00.000-08:00</updated><title type='text'>Well, you can certainly rescue some of your blog p...</title><content type='html'>Well, you can certainly rescue some of your blog posts to that end. This one on monoid is perfect really, theory meets practice !&lt;BR/&gt;&lt;BR/&gt;Maybe you could team up with &lt;A HREF="http://scienceblogs.com/goodmath/goodmath/programming/haskell/" REL="nofollow"&gt;Good Math&lt;/A&gt; ? &lt;BR/&gt;&lt;BR/&gt;The two of you have already produced quite a bit along those lines.&lt;BR/&gt;&lt;BR/&gt;The book would obviously need a concerted approach with respect to the topics presented... &lt;BR/&gt;&lt;BR/&gt;I am pretty sure, a lot of newcomers to Haskell would love to read more about the Mathematics lurking behind its powerful features.&lt;BR/&gt;&lt;BR/&gt;Maybe it could be self-published, something like Lulu ?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7641229007820063972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7641229007820063972'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1233855900000#c7641229007820063972' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-6538228672369862344</id><published>2009-01-27T14:52:00.000-08:00</published><updated>2009-01-27T14:52:00.000-08:00</updated><title type='text'>Peter,Any monoid makes Writer a monad. Any commuta...</title><content type='html'>Peter,&lt;BR/&gt;&lt;BR/&gt;Any monoid makes Writer a monad. Any commutative monoid makes Writer a commutative monad.&lt;BR/&gt;&lt;BR/&gt;Anynoymous,&lt;BR/&gt;&lt;BR/&gt;I'd love to collect together a bunch of algebraic programming stuff in a book. But I also know it's a vast amount of work to get a book written. I'd need several months off work.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/6538228672369862344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/6538228672369862344'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1233096720000#c6538228672369862344' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09401818062305273147'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7429058913543989827</id><published>2009-01-27T14:34:00.000-08:00</published><updated>2009-01-27T14:34:00.000-08:00</updated><title type='text'>Wow, I for one would love to see a book full of ma...</title><content type='html'>Wow, I for one would love to see a book full of material like this ! A book exposing Haskell mathematical underpinnings and techniques to harness this power in day to day programming...&lt;BR/&gt;Do you feel up to it?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7429058913543989827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7429058913543989827'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1233095640000#c7429058913543989827' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-5439408264911599075</id><published>2009-01-24T20:15:00.000-08:00</published><updated>2009-01-24T20:15:00.000-08:00</updated><title type='text'>With the comment about "Any" being clearer than "B...</title><content type='html'>With the comment about "Any" being clearer than "Bool" about the intentions of the code, it seems like it's actually a Good Thing that Haskell requires newtype wrappers to coax different monoids out of the same type.&lt;BR/&gt;&lt;BR/&gt;As for Writer and commutativity, I think that to be a monad it has to satisfy the monad "commutativity" law, for which it relies on the monoid's commutativity. Is that right?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/5439408264911599075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/5439408264911599075'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232856900000#c5439408264911599075' title=''/><author><name>Peter Berry</name><uri>http://www.blogger.com/profile/08770230331776974807</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-1544072014320810577</id><published>2009-01-24T08:11:00.000-08:00</published><updated>2009-01-24T08:11:00.000-08:00</updated><title type='text'>Thanks for an excellent article, Dan.  I normally ...</title><content type='html'>Thanks for an excellent article, Dan.  I normally get about halfway through your blog posts before my brain explodes; eliminating all the jargon in your post and explaining all the maths terms helped tremendously.  (For example, I know what associativity is, but I always confuse it with commutativity, and it's great that you cater for the dumb folk like me without having to look up all the terms to clarify the terms :).  It helps a ton with the flow of the article.)&lt;BR/&gt;&lt;BR/&gt;Please keep up writing blog posts targeted at the poor folks like me, who have some Haskell skills but don't really know all the maths jargon!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/1544072014320810577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/1544072014320810577'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232813460000#c1544072014320810577' title=''/><author><name>André Pang</name><uri>http://www.blogger.com/profile/10083178578284485368</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-493826300030529475</id><published>2009-01-22T12:48:00.000-08:00</published><updated>2009-01-22T12:48:00.000-08:00</updated><title type='text'>And monads are a monoid object in the category of ...</title><content type='html'>And monads are a monoid object in the category of endofunctors.&lt;BR/&gt;&lt;BR/&gt;In the language of the times monoid is a minimalist notion of composition before categorification. Monad is a minimalist notion of composition post categorification.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/493826300030529475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/493826300030529475'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232657280000#c493826300030529475' title=''/><author><name>leithaus</name><uri>http://www.blogger.com/profile/01069099703796397027</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7288982103996085899</id><published>2009-01-22T06:39:00.000-08:00</published><updated>2009-01-22T06:39:00.000-08:00</updated><title type='text'>Anonymous,Mooids form a monoidal category in fact....</title><content type='html'>Anonymous,&lt;BR/&gt;&lt;BR/&gt;Mooids form a &lt;A HREF="http://en.wikipedia.org/wiki/Monoidal_category" REL="nofollow"&gt;monoidal category in fact&lt;/A&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7288982103996085899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7288982103996085899'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232635140000#c7288982103996085899' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09401818062305273147'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7915992082775821096</id><published>2009-01-22T05:25:00.000-08:00</published><updated>2009-01-22T05:25:00.000-08:00</updated><title type='text'>Multiplying monoids gives a product monoid. This i...</title><content type='html'>Multiplying monoids gives a product monoid. This is associative and has a neutral element. So monoids form a monoid :) (up to isomorphism)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7915992082775821096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7915992082775821096'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232630700000#c7915992082775821096' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-3223261268601730617</id><published>2009-01-21T08:24:00.000-08:00</published><updated>2009-01-21T08:24:00.000-08:00</updated><title type='text'>This was an amazingly straightforward yet enlighte...</title><content type='html'>This was an amazingly straightforward yet enlightening article; the section on the 'Product' monoid was particularly novel for me.  I would love to see you expand on the concepts you mentioned towards the end, grounded with real-world haskell examples (as you did in this post.)  Thanks for writing sigfpe!&lt;BR/&gt;&lt;BR/&gt;P.S.  In my opinion you just single-handedly resolved the 'Appendable' debate on haskell-cafe with your tree folding examples.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/3223261268601730617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/3223261268601730617'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232555040000#c3223261268601730617' title=''/><author><name>lodi</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-5743095652778688385</id><published>2009-01-19T10:07:00.000-08:00</published><updated>2009-01-19T10:07:00.000-08:00</updated><title type='text'>Dan,And when we have a 'notion of composition' (mo...</title><content type='html'>Dan,&lt;BR/&gt;&lt;BR/&gt;And when we have a &amp;#39;notion of composition&amp;#39; (monoid ~ monad) plus a &amp;#39;notion of collection&amp;#39; (essentially presented as a monad) we can autogenerate a &amp;#39;relationally complete&amp;#39; logic. &lt;BR/&gt;&lt;BR/&gt;m,n ::= e | g1 | ... | gN | m*n&lt;BR/&gt;&lt;BR/&gt;That freely generates our monoid terms (for a monoid with N generators), but needs to be whacked down by m*e = m = e*m, m1*(m2*m3) = (m1*m2)*m3 (plus whatever other identities a specific monoid supports). If our &amp;#39;notion of collection is set&amp;#39;, the we get the following logic &amp;#39;for free&amp;#39;.&lt;BR/&gt;&lt;BR/&gt;k,l ::= true | ~k | k&amp;amp;l &lt;BR/&gt;        e | g1 | ... | gN | k*l&lt;BR/&gt;        for x in k.l | rec x.k | x&lt;BR/&gt;&lt;BR/&gt;The boolean connectives at the top come from the fact that we&amp;#39;re using set. The &amp;#39;structural&amp;#39; connectives in the middle come from the monoid structure. The other structure comes from calculations of fixpoints.&lt;BR/&gt;&lt;BR/&gt;See &lt;A HREF="http://biosimilarity.blogspot.com/2007/02/algebraic-databases.html" REL="nofollow"&gt;algebraic databases&lt;/A&gt; for more discussion. Or, &lt;A HREF="http://biosimilarity.blogspot.com/2009/01/3-applications-of-indexed-composition.html" REL="nofollow"&gt;indexed compositions&lt;/A&gt; for applications.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/5743095652778688385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/5743095652778688385'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232388420000#c5743095652778688385' title=''/><author><name>leithaus</name><uri>http://www.blogger.com/profile/01069099703796397027</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7827357717152706114</id><published>2009-01-18T15:49:00.000-08:00</published><updated>2009-01-18T15:49:00.000-08:00</updated><title type='text'>Here's a possible solution to the min/max problem:...</title><content type='html'>Here&amp;#39;s a possible solution to the min/max problem:&lt;BR/&gt;&lt;BR/&gt;This part ought to be in a library:&lt;BR/&gt;&lt;BR/&gt;&amp;gt; data Smallest a = Smallest a | PlusInfinity deriving (Show,Eq,Ord)&lt;BR/&gt;&amp;gt; data Largest a = MinusInfinity | Largest a deriving (Show,Eq,Ord)&lt;BR/&gt;&lt;BR/&gt;&amp;gt; instance (Ord a) =&amp;gt; Monoid (Smallest a) where&lt;BR/&gt;&amp;gt;     mempty = PlusInfinity&lt;BR/&gt;&amp;gt;     mappend = min&lt;BR/&gt;&lt;BR/&gt;&amp;gt; instance (Ord a) =&amp;gt; Monoid (Largest a) where&lt;BR/&gt;&amp;gt;     mempty = MinusInfinity&lt;BR/&gt;&amp;gt;     mappend = max&lt;BR/&gt;&lt;BR/&gt;&amp;gt; ex10 = foldMap (Smallest &amp;amp;&amp;amp;&amp;amp; Largest) tree :: (Smallest Int,Largest Int)&lt;BR/&gt;&lt;BR/&gt;And the implementation would then be just:&lt;BR/&gt;&lt;BR/&gt;&amp;gt; ex10 = foldMap (Smallest &amp;amp;&amp;amp;&amp;amp; Largest) tree :: (Smallest Int,Largest Int)&lt;BR/&gt;&lt;BR/&gt;I got the idea for using &amp;amp;&amp;amp;&amp;amp; from http://hpaste.org/14067&lt;BR/&gt;&lt;BR/&gt;This is an updated version. My first attempt was wrong :-(</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7827357717152706114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/7827357717152706114'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232322540000#c7827357717152706114' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09401818062305273147'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-2669299631291723570</id><published>2009-01-18T15:40:00.000-08:00</published><updated>2009-01-18T15:40:00.000-08:00</updated><title type='text'>Ah, right... deriving to the rescue. :)</title><content type='html'>Ah, right... deriving to the rescue. :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/2669299631291723570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/2669299631291723570'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232322000000#c2669299631291723570' title=''/><author><name>Shin no Noir</name><uri>http://www.blogger.com/profile/08974372500960094990</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-2449059956426574359</id><published>2009-01-18T11:59:00.000-08:00</published><updated>2009-01-18T11:59:00.000-08:00</updated><title type='text'>I've come up with the following solution to the Mi...</title><content type='html'>I've come up with the following solution to the Min/Max monoid exercise, but it only works for instances of Bounded:&lt;BR/&gt;&lt;BR/&gt;   http://hpaste.org/14067&lt;BR/&gt;&lt;BR/&gt;Does a nice solution exists for non-bounded types? The only possible solution I thought of so far is introducing a type that's isomorphic to Maybe.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/2449059956426574359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/2449059956426574359'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232308740000#c2449059956426574359' title=''/><author><name>Shin no Noir</name><uri>http://www.blogger.com/profile/08974372500960094990</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-1277418843944497096</id><published>2009-01-18T11:49:00.000-08:00</published><updated>2009-01-18T11:49:00.000-08:00</updated><title type='text'>Great article! Surely you mean to cite your earlie...</title><content type='html'>Great article! Surely you mean to cite &lt;A HREF="http://sigfpe.blogspot.com/2008/11/approach-to-algorithm-parallelisation.html" REL="nofollow"&gt;your earlier article on algorithm parallelization&lt;/A&gt;. (:</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/1277418843944497096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/1277418843944497096'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232308140000#c1277418843944497096' title=''/><author><name>單中杰</name><uri>http://www.blogger.com/profile/14754929367418830739</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-3066780622758095169</id><published>2009-01-18T09:19:00.000-08:00</published><updated>2009-01-18T09:19:00.000-08:00</updated><title type='text'>Thanks, a very clear explanation of not just what ...</title><content type='html'>Thanks, a very clear explanation of not just what monoids are, but also (and much more importantly) why they are an interesting abstraction for programming. I hope you get time to talk about the interesting-sounding stuff you mentioned at the end of your post.&lt;BR/&gt;&lt;BR/&gt;A quick question: for the Writer monad, is it necessary for mappend to be associative?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/3066780622758095169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/3066780622758095169'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232299140000#c3066780622758095169' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-4976680373202357654</id><published>2009-01-18T09:10:00.000-08:00</published><updated>2009-01-18T09:10:00.000-08:00</updated><title type='text'>Drew,I was, of course, following the little flamew...</title><content type='html'>Drew,&lt;BR/&gt;&lt;BR/&gt;I was, of course, following the little flamewar about monoids!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/4976680373202357654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7531218329312814569/comments/default/4976680373202357654'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html?showComment=1232298600000#c4976680373202357654' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09401818062305273147'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html' ref='tag:blogger.com,1999:blog-11295132.post-7531218329312814569' source='http://www.blogger.com/feeds/11295132/posts/default/7531218329312814569' type='text/html'/></entry></feed>