<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><DIV><BR class="khtml-block-placeholder"></DIV><DIV>In my opinion, one of the things that makes Haskell difficult to learn is the value system.  I'm not referring to "pure" vs. "impure".  Instead, I am referring to the beliefs and principles held by the Haskell community that are not shared with most of the programming world.  Principles like "It is valuable to be able to reason about programs rigorously".  This is foreign to most developers.  When they get to the section of a Haskell book that starts talking about this, their eyes glaze over and they skip over to the "more practical stuff".  By the time they get to Monads they're ready to rip their eyes out because the book is "too theoretical" or "too academic".</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>One of the truly powerful things about Haskell is the short distance between theory and practicality.  The problem is how to demonstrate this convincingly.  The ability to prove a program's correctness is regularly trotted out for show in this arena (or at least the lighter-weight claim that programs that compile usually work).  I don't think that most developers (and certainly not the OSCON crowd) are ready to drink that kool-aid.  They *enjoy* debugging and are tired of the "static" vs. "dynamic" debate.  But the ability to reason about programs has borne fruit that I *do* think they will appreciate.  Because many of them care about performance.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>I don't need to tell the subscribers to this list that the shockingly good performance of code written using Data.ByteString.Lazy is a direct result of being able to reason about programs.  Obviously, the details of the fusion techniques are outside the scope of any introductory tutorial.  But I think it would be useful to quickly implement a "wc -l" equivalent and explain why it's faster than the simple C equivalent.  Nothing overly deep, just draw the line from "reasoning about programs" to "fusion" and on to "amazing performance"  (capping it off with the fact the the fusion optimization is in the *Library*, not baked in to the compiler).  At a minimum, it shows that being able to reason about programs rigorously can have a payoff in a currency that they value.</DIV><SPAN class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "></SPAN><BR><DIV> <SPAN class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><DIV>R Hayes</DIV><DIV>rfhayes&lt;&gt;@&lt;/&gt;reillyhayes.com</DIV><DIV><BR class="khtml-block-placeholder"></DIV><BR class="Apple-interchange-newline"></SPAN> </DIV><BR><DIV><DIV>On Apr 16, 2007, at 1:34 AM, Simon Peyton-Jones wrote:</DIV><BR class="Apple-interchange-newline"><BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Friends</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">I have agreed to give a 3-hr tutorial on Haskell at the Open Source Convention 2007</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">        </SPAN><A href="http://conferences.oreillynet.com/os2007/">http://conferences.oreillynet.com/os2007/</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">I'm quite excited about this: it is a great opportunity to expose Haskell to a bunch of smart folk, many of whom won't know much about Haskell.<SPAN class="Apple-converted-space">  </SPAN>My guess is that they'll be Linux/Perl/Ruby types, and they'll be practitioners rather than pointy-headed academics.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">One possibility is to do a tutorial along the lines of "here's how to reverse a list", "here's what a type is" etc; you know the kind of thing.<SPAN class="Apple-converted-space">  </SPAN>But instead, I'd prefer to show them programs that they might consider *useful* rather than cute, and introduce the language along the way, as it were.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">So this message is to ask you for your advice.<SPAN class="Apple-converted-space">  </SPAN>Many of you are exactly the kind of folk that come to OSCON --- except that you know Haskell. <SPAN class="Apple-converted-space">  </SPAN>So help me out:</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">        </SPAN>Suggest concrete examples of programs that are</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">                </SPAN>* small</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">                </SPAN>* useful</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">                </SPAN>* demonstrate Haskell's power</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">                </SPAN>* preferably something that might be a bit</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">                        </SPAN>tricky in another language</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">For example, a possible unifying theme would be this:</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">        </SPAN><A href="http://haskell.org/haskellwiki/Simple_unix_tools">http://haskell.org/haskellwiki/Simple_unix_tools</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Another might be Don's cpu-scaling example</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN class="Apple-converted-space">        </SPAN><A href="http://cgi.cse.unsw.edu.au/~dons/blog/2007/03/10">http://cgi.cse.unsw.edu.au/~dons/blog/2007/03/10</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">But there must be lots of others.<SPAN class="Apple-converted-space">  </SPAN>For example, there are lots in the blog entries that Don collects for the Haskell Weekly Newsletter.<SPAN class="Apple-converted-space">  </SPAN>But I'd like to use you as a filter: tell me your favourites, the examples you find compelling.<SPAN class="Apple-converted-space">  </SPAN>(It doesn't have to be *your* program... a URL to a great blog entry is just fine.)<SPAN class="Apple-converted-space">  </SPAN>Of course I'll give credit to the author.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Remember, the goal is _not_ "explain monads".<SPAN class="Apple-converted-space">  </SPAN>It's "Haskell is a great way to Get The Job Done".</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Thanks!</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Simon</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">_______________________________________________</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Haskell-Cafe mailing list</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</A></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><A href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</A></DIV> </BLOCKQUOTE></DIV><BR></BODY></HTML>