Thanks all for you suggestions!<br>Upon further reflection I realized that my audience is more pragmatic than theoretical. Instead of emphasizing how monads are constructed and the monad laws I think I want to dive right into the most common and useful monads. From my vantage point they are (in no particular order) : Reader, Writer, State, IO, ST, STM, Parsec (have I missed any?) and of course the transformer versions. I am debating whether or not to add [] to the bunch. <br>
<br>To explain monads (now that I have Timothy&#39;s awesome blog post to reference) I&#39;ll be drawing the parallel between monads and interfaces in Java. And thanks to Tillman for showing me where the analogy breaks down. Are there any such parallels in other languages like Perl and Python? <br>
<br>I&#39;m still a little iffy on why the monad concept isn&#39;t used in other languages. From where I sit it seems as though monads really let you play with the order of evaluation - just because one statement is executed after another doesn&#39;t mean they are executed in that order. I think other languages don&#39;t make this easy. <br>
<br>-deech<br><br><div class="gmail_quote">On Wed, Aug 4, 2010 at 6:21 PM, Daniel van den Eijkel <span dir="ltr">&lt;<a href="mailto:dvde@gmx.net">dvde@gmx.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">



  

<div bgcolor="#ffffff" text="#000000">
For me, the following two things did the magic, so I&#39;ll suggest them:<br>
<br>
1.<br>
Writing a recursive function that takes a binary tree and returns the
same tree, but with its leaves enumerated. Each function call takes the
tree and the counter and returns the resulting tree and the new counter
value. The pattern that emerges is similar to the state monad. The
pattern shows that the order of the recursive calls is not ambiguous,
unlike in a function that just counts the leaves, for example. Changing
the order of the recursive calls changes the result.<br>
(code below)<br>
<br>
2. <br>
Putting the above pattern into a datatype and rewriting the
apply-funtion for this datatype (&gt;&gt;=) allows only to apply
funtions in a non-ambiguous way. Not giving a deconstructor for the IO
monad forces the programmer to
decide in which order calls to IO functions have to be done.<br>
<br>
I hope this is clear enough; I was able to use the IO monad at the
moment I realized that Haskell uses this kind of &quot;trick&quot; to ensure that
the order of execution of function arguments is always well-defined and
never ambiguous. Of course, there is much more about monads, but this
was my entry point.<br>
<br>
Best regards<br>
Daniel<br>
<br>
<br>
code (tree enumeration):<br>
<br>
data Tree a = Leaf a | Node (Tree a) (Tree a) deriving Show<br>
<br>
enumTree n (Node a b) =<br>
 let (n&#39;, a&#39;)  = enumTree n a in<br>
 let (n&#39;&#39;, b&#39;) = enumTree n&#39; b in <br>
 (n&#39;&#39;, Node a&#39; b&#39;)<br>
<br>
enumTree n (Leaf x) = (n+1, Leaf n)<br>
<br>
<br>
<br>
<br>
<br>
aditya siram schrieb:
<blockquote type="cite"><div><div></div><div class="h5">Hi all,<br>
I am doing an &quot;Intro To Monads&quot; talk in September [1]. The audience
consists of experienced non-Haskell developers but they will be
familiar with basic functional concepts (closures, first-class
functions etc.). <br>
  <br>
I am looking for suggestions on how to introduce the concept and its
implications. I&#39;d also like to include a section on why monads exist
and why we don&#39;t really see them outside of Haskell.<br>
  <br>
Has anyone here done a talk like this? And if so what parts of your
presentation were successful and what would you stay away from.<br>
  <br>
Thanks for the feedback.<br>
-deech<br>
  <br>
[1] It&#39;s in St.Louis, Missouri at the <a href="http://St.Louis%20Perl%20Mongers%20meeting" target="_blank">St.Louis Perl
Mongers meeting</a> so come on by if you&#39;re around!<br>
  </div></div><pre><hr size="4" width="90%"><div class="im">
_______________________________________________
Haskell-Cafe mailing list
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a>
  </div></pre>
</blockquote>
</div>

</blockquote></div><br>