<?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.post7403719901682023510..comments</id><updated>2011-07-21T05:47:18.290-07:00</updated><category term='category theory'/><category term='lawvere theories'/><category term='astronomy'/><category term='optimisation'/><category term='self-reference'/><category term='comonads'/><category term='haskell'/><category term='programming'/><category term='monad'/><category term='mathematics'/><category term='physics'/><category term='probability'/><category term='types'/><category term='quantum'/><title type='text'>Comments on A Neighborhood of Infinity: The Trivial Monad</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.sigfpe.com/feeds/7403719901682023510/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html'/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://homepage.mac.com/sigfpe/.Pictures/Photo%20Album%20Pictures/2002-12-07%2014.53.40%20-0800/ImageDSC01397_1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11295132.post-6320538195306566568</id><published>2011-07-21T01:52:56.372-07:00</published><updated>2011-07-21T01:52:56.372-07:00</updated><title type='text'>Thank you! I really, really enjoyed the exercises,...</title><content type='html'>Thank you! I really, really enjoyed the exercises, especially proving the Monad laws and writing &amp;quot;join&amp;quot;: that was the only one where I got so stuck that I had to write the types out on paper.&lt;br /&gt;&lt;br /&gt;Luckily I had the intuition to write out the type for bind, then try to get m (m a) on one side and m a on the other! It was fun.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/6320538195306566568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/6320538195306566568'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1311238376372#c6320538195306566568' title=''/><author><name>openid</name><uri>http://sairyx.org/openid?id=117546008235945914872</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/openid16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-743881411'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-3696960445510229835</id><published>2010-05-23T08:59:23.692-07:00</published><updated>2010-05-23T08:59:23.692-07:00</updated><title type='text'>ur right, and it&amp;#39;s an awesome tutorial. sorry ...</title><content type='html'>ur right, and it&amp;#39;s an awesome tutorial. sorry I didn&amp;#39;t say that in the first place!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/3696960445510229835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/3696960445510229835'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1274630363692#c3696960445510229835' title=''/><author><name>Matthew Kane Parker</name><uri>http://www.blogger.com/profile/17545396524154679147</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_IZSAbZa0lpU/SQ-kKJBdq2I/AAAAAAAAAAw/tVtd-SRB-xU/S220/avatar128.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-4535691'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-9058698413324365804</id><published>2010-05-22T16:08:09.071-07:00</published><updated>2010-05-22T16:08:09.071-07:00</updated><title type='text'>Matthew,

It&amp;#39;s cool that people are now identi...</title><content type='html'>Matthew,&lt;br /&gt;&lt;br /&gt;It&amp;#39;s cool that people are now identifying places where they can use Applicative instead of Monad. (Scroll up, you&amp;#39;re not the first.) But this is intended as a Monad tutorial. I haven&amp;#39;t written an Applicative tutorial yet. :-)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/9058698413324365804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/9058698413324365804'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1274569689071#c9058698413324365804' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://homepage.mac.com/sigfpe/.Pictures/Photo%20Album%20Pictures/2002-12-07%2014.53.40%20-0800/ImageDSC01397_1.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-961546855'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-8830832170691259715</id><published>2010-05-22T15:58:44.196-07:00</published><updated>2010-05-22T15:58:44.196-07:00</updated><title type='text'>for the 2nd question, defining h, the use of monad...</title><content type='html'>for the 2nd question, defining h, the use of monad is overkill (and cumbersome). a discussion of applicative is warranted, since making W an instance of Applicative would allow you to define h quite naturally: &lt;br /&gt;&lt;br /&gt;h x y = (+) &amp;lt;$&amp;gt; x &amp;lt;*&amp;gt; y&lt;br /&gt;&lt;br /&gt;which looks a lot more like simple addition ((+) x y) than any of the monadic equivalents:&lt;br /&gt;&lt;br /&gt;h x y = x &amp;gt;&amp;gt;= \x&amp;#39; -&amp;gt; y &amp;gt;&amp;gt;= y&amp;#39; -&amp;gt; return (x&amp;#39; + y&amp;#39;)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/8830832170691259715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/8830832170691259715'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1274569124196#c8830832170691259715' title=''/><author><name>Matthew Kane Parker</name><uri>http://www.blogger.com/profile/17545396524154679147</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_IZSAbZa0lpU/SQ-kKJBdq2I/AAAAAAAAAAw/tVtd-SRB-xU/S220/avatar128.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-4535691'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-2209200297611469377</id><published>2010-04-05T14:05:44.419-07:00</published><updated>2010-04-05T14:05:44.419-07:00</updated><title type='text'>@Moritz: In this case, nothing prevents people fro...</title><content type='html'>@Moritz: In this case, nothing prevents people from writing an unwrapper, but often the data constructor will not be exported from a module, and so not be visible, as it is here.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/2209200297611469377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/2209200297611469377'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1270501544419#c2209200297611469377' title=''/><author><name>BorisTheBlade</name><uri>http://www.blogger.com/profile/09024392832854766007</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1267434472'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-5171855430176174129</id><published>2009-05-27T18:58:47.983-07:00</published><updated>2009-05-27T18:58:47.983-07:00</updated><title type='text'>typo: 
We we need to provide</title><content type='html'>typo: &lt;br /&gt;We we need to provide</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/5171855430176174129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/5171855430176174129'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1243475927983#c5171855430176174129' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1376721691'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-4812116993697382305</id><published>2009-05-19T17:05:19.067-07:00</published><updated>2009-05-19T17:05:19.067-07:00</updated><title type='text'>Hi, great post and very helpful in developing an i...</title><content type='html'>Hi, great post and very helpful in developing an intuition. One difficulty is that at the point you introduced the exercises, you had defined &amp;#39;bind&amp;#39; but not (&amp;gt;&amp;gt;=), yet you give the solutions in terms of (&amp;gt;&amp;gt;=).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/4812116993697382305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/4812116993697382305'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1242777919067#c4812116993697382305' title=''/><author><name>Mike M.</name><uri>http://www.blogger.com/profile/10332487203149978380</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1932268408'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-5317928154172892911</id><published>2008-04-05T21:53:00.000-07:00</published><updated>2008-04-05T21:53:00.000-07:00</updated><title type='text'>For exercises 1 and 2, using only functions define...</title><content type='html'>For exercises 1 and 2, using only functions defined up to those exercises:&lt;BR/&gt;&lt;BR/&gt;exercise 1: &lt;BR/&gt;g x my = fmap (+x) my&lt;BR/&gt;&lt;BR/&gt;exercise 2: &lt;BR/&gt;h w1 w2 = bind (\x -&gt; fmap (+x) w2) w1&lt;BR/&gt;&lt;BR/&gt;I have &lt;A HREF="http://dauclair.blogspot.com/2008/04/trivial-monad-solutions.html" REL="nofollow"&gt;an apologetic blog entry&lt;/A&gt; discussing those solutions, the loquacious review process may be helpful to monad neophytes, should they be looking for an alternative approach to the solutions given here.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/5317928154172892911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/5317928154172892911'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1207457580000#c5317928154172892911' title=''/><author><name>geophf</name><uri>http://www.blogger.com/profile/09936874508556500234</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-474845376'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-3863039603892767049</id><published>2008-01-04T18:49:00.000-08:00</published><updated>2008-01-04T18:49:00.000-08:00</updated><title type='text'>Thanks, this article has been a huge help.  In par...</title><content type='html'>Thanks, this article has been a huge help.  In particular it has helped clarify the relationship between &gt;&gt;= and composition.  I still don't like the syntax of &gt;&gt;= but, I can get around that now.  I did suffer some frustration from not understanding that type definitions cannot be entered interactively and wasted a little time getting around that.  A little note in the next revision might be of help.  Anyway, I look forward to the next installment.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/3863039603892767049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/3863039603892767049'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1199501340000#c3863039603892767049' title=''/><author><name>Ralph</name><uri>http://www.blogger.com/profile/03021114177184971018</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1091261950'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-4572229610828660696</id><published>2007-06-21T20:30:00.000-07:00</published><updated>2007-06-21T20:30:00.000-07:00</updated><title type='text'>Moritz,&lt;br&gt;&lt;br&gt;When I talk about managing tainted ...</title><content type='html'>Moritz,&lt;BR/&gt;&lt;BR/&gt;When I talk about managing tainted data I'm not describing some kind of secure programming, just as a 'private' member of a C++ class doesn't prevent people accessing private members through pointer trickery. The point is that if you have a block of code that uses only the monad interface you can reason about what data is 'tainted' really easily. You're free to access that data directly, rather than through the monad API. But at that point the useful theorems about monads no longer apply so it's going to be harder to figure out what is and isn't tainted.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/4572229610828660696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/4572229610828660696'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1182483000000#c4572229610828660696' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-961546855'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-3313253958055247178</id><published>2007-06-14T14:13:00.000-07:00</published><updated>2007-06-14T14:13:00.000-07:00</updated><title type='text'>What prevents anybody from writing an unwrapper:&lt;b...</title><content type='html'>What prevents anybody from writing an unwrapper:&lt;BR/&gt;&lt;BR/&gt;unwrap W x = x&lt;BR/&gt;&lt;BR/&gt;Or something?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/3313253958055247178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/3313253958055247178'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1181855580000#c3313253958055247178' title=''/><author><name>Moritz</name><uri>http://moritz.faui2k3.org/en/</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1572659715'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-4070775460033545908</id><published>2007-05-01T20:26:00.000-07:00</published><updated>2007-05-01T20:26:00.000-07:00</updated><title type='text'>I took the long way around with looking up  liftM2...</title><content type='html'>I took the long way around with looking up  liftM2's definition in 'do' syntax, untangling the 'do' notation, then smacking my head for not realizing how to unwrap that first monad.  From there it was pretty simple to see how g fit in there.&lt;BR/&gt;&lt;BR/&gt;Monads click with me, thanks in no small part to all these tutorials ... now to learn Monad Transformers, Arrows and Comonads.    And fundeps, and GADTs and a Partridge in a Pear Tree... It's weightlifting for the brain, Haskell is.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/4070775460033545908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/4070775460033545908'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1178076360000#c4070775460033545908' title=''/><author><name>Chuck</name><uri>http://www.blogger.com/profile/12403744972060658849</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2067021209'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-957985849427619015</id><published>2007-05-01T13:31:00.000-07:00</published><updated>2007-05-01T13:31:00.000-07:00</updated><title type='text'>Chuck,&lt;br&gt;&lt;br&gt;I only just got around to doing my o...</title><content type='html'>Chuck,&lt;BR/&gt;&lt;BR/&gt;I only just got around to doing my own exercises(!!) and I have to admit that they made me pause for a bit. Here's a hint: use 'g' in the definition of 'h'. If you do that then 'h' looks a lot like 'g'.&lt;BR/&gt;&lt;BR/&gt;I'll put the answers in my next blog post - mainly because I'll be using them.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/957985849427619015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/957985849427619015'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1178051460000#c957985849427619015' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-961546855'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-8300425656763230638</id><published>2007-05-01T13:26:00.000-07:00</published><updated>2007-05-01T13:26:00.000-07:00</updated><title type='text'>I feel hopelessly stupid, as I've been stuck on de...</title><content type='html'>I feel hopelessly stupid, as I've been stuck on defining h for more than an hour now.  I even know that :&lt;BR/&gt;&lt;BR/&gt;h = liftM2 (+)&lt;BR/&gt;&lt;BR/&gt;but I'll be damned if I can actually define it from first principles.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/8300425656763230638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/8300425656763230638'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1178051160000#c8300425656763230638' title=''/><author><name>Chuck</name><uri>http://www.blogger.com/profile/12403744972060658849</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-2067021209'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7217979754298508049</id><published>2007-05-01T12:50:00.000-07:00</published><updated>2007-05-01T12:50:00.000-07:00</updated><title type='text'>&amp;gt; I guess I would be similarly confused by auto...</title><content type='html'>&gt; I guess I would be similarly confused by automatic lifting.&lt;BR/&gt;&lt;BR/&gt;So would I. This is why I think it's still a challenge for programming languages. Someone needs to find a way to do this that isn't confusing and still allows explicit control when needed.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/7217979754298508049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/7217979754298508049'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1178049000000#c7217979754298508049' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-961546855'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-8407460706113642364</id><published>2007-05-01T12:03:00.000-07:00</published><updated>2007-05-01T12:03:00.000-07:00</updated><title type='text'>I have the paper on my desk. Had to consult it to ...</title><content type='html'>I have the paper on my desk. Had to consult it to define &lt;*&gt;. *blush*&lt;BR/&gt;&lt;BR/&gt;Applicative and Traversable are already included in GHC, but I don't know if they are included by the other compilers. It would be a shame if they weren't included in a future set of standard haskell libraries though. &lt;BR/&gt;&lt;BR/&gt;I've skimmed the paper a couple of times, but haven't used the ideas in real code yet. They seem to promise very elegant code. And that, to me, is probably the most important thing with haskell.&lt;BR/&gt;&lt;BR/&gt;Automatically lifted functions and values would be sweet. It could perhaps lead to some obfuscation a la operator overloading in c++. I already feel a bit confused over what &gt;&gt;= does sometimes since it depends on what monad I'm in at the moment. I guess I would be similarly confused by automatic lifting. Then again, perhaps both &gt;&gt;= and automatic lifting are things you just get used to.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/8407460706113642364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/8407460706113642364'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1178046180000#c8407460706113642364' title=''/><author><name>Niclas</name><uri>http://www.blogger.com/profile/10891748141918429638</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-818039900'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-9089143387865574824</id><published>2007-05-01T11:00:00.000-07:00</published><updated>2007-05-01T11:00:00.000-07:00</updated><title type='text'>Niclas,&lt;br&gt;&lt;br&gt;'Applicative' is nice. If you dig o...</title><content type='html'>Niclas,&lt;BR/&gt;&lt;BR/&gt;'Applicative' is nice. If you dig out the original paper you'll see they propose a great syntax for applicatives, but I don't think it ever made its way into official release of Haskell.&lt;BR/&gt;&lt;BR/&gt;I think the biggest thing waiting to be invented for Haskell is a way to apply things like liftM implicitly. I think 'Applicative' is a step in the right direction.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/9089143387865574824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/9089143387865574824'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1178042400000#c9089143387865574824' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-961546855'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-1988288929538804345</id><published>2007-05-01T10:53:00.000-07:00</published><updated>2007-05-01T10:53:00.000-07:00</updated><title type='text'>Thanks for the exercises. Defining h really got me...</title><content type='html'>Thanks for the exercises. Defining h really got me to appreciate the functions in Control.Monad, especially the liftM* family =)&lt;BR/&gt;&lt;BR/&gt;The problem with liftM* is, imho, the ugliness of having to use different functions depending on the arity of the lifted function. Perhaps that's what Control.Applicative is for?&lt;BR/&gt;&lt;BR/&gt;instance Applicative W where&lt;BR/&gt;    pure = return&lt;BR/&gt;    ff &lt;*&gt; fx = ap ff fx&lt;BR/&gt;&lt;BR/&gt;g x  wy = pure (+) &lt;*&gt; pure x &lt;*&gt; wy&lt;BR/&gt;h wx wy = pure (+) &lt;*&gt; wx &lt;*&gt; wy&lt;BR/&gt;&lt;BR/&gt;Yes! Beautiful.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/1988288929538804345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/1988288929538804345'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1178041980000#c1988288929538804345' title=''/><author><name>Niclas</name><uri>http://www.blogger.com/profile/10891748141918429638</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-818039900'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-4976395644202478324</id><published>2007-05-01T09:25:00.000-07:00</published><updated>2007-05-01T09:25:00.000-07:00</updated><title type='text'>Maybe he looked at the source for &lt;b&gt;Control.Monad...</title><content type='html'>Maybe he looked at the source for &lt;B&gt;Control.Monad.Identity&lt;/B&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/4976395644202478324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/4976395644202478324'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1178036700000#c4976395644202478324' title=''/><author><name>Anonymous</name><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/blank.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-499996333'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-789412336409705440</id><published>2007-04-30T09:17:00.000-07:00</published><updated>2007-04-30T09:17:00.000-07:00</updated><title type='text'>Kevin,&lt;br&gt;&lt;br&gt;I hope you didn't cheat!</title><content type='html'>Kevin,&lt;BR/&gt;&lt;BR/&gt;I hope you didn't cheat!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/789412336409705440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/789412336409705440'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1177949820000#c789412336409705440' title=''/><author><name>sigfpe</name><uri>http://www.blogger.com/profile/08096190433222340957</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-961546855'/></entry><entry><id>tag:blogger.com,1999:blog-11295132.post-7959865092904871372</id><published>2007-04-28T13:16:00.000-07:00</published><updated>2007-04-28T13:16:00.000-07:00</updated><title type='text'>join m = m &gt;&gt;= id</title><content type='html'>join m = m &gt;&gt;= id</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/7959865092904871372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11295132/7403719901682023510/comments/default/7959865092904871372'/><link rel='alternate' type='text/html' href='http://blog.sigfpe.com/2007/04/trivial-monad.html?showComment=1177791360000#c7959865092904871372' title=''/><author><name>Kevin</name><uri>http://www.blogger.com/profile/07426867900304204157</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.sigfpe.com/2007/04/trivial-monad.html' ref='tag:blogger.com,1999:blog-11295132.post-7403719901682023510' source='http://www.blogger.com/feeds/11295132/posts/default/7403719901682023510' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-645011170'/></entry></feed>
