
On Fri, Aug 06, 2010 at 10:17:26AM -0500, aditya siram wrote:
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.
Not sure how much time you have budgeted, but I'd start with a simple one like Maybe, actually show how to implement it, then move on to list, and then finally talk about Reader, Writer, State, etc. from a more high level perspective. Hopefully people would grok the monad concept by that point, and should realize how useful it is to add logging, or state, etc. Then they may wonder about mixing in more than 1, so that could lead to transformers.
To explain monads (now that I have Timothy's awesome blog post to reference) I'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?
I get the type class / Java interface analogy, but trying to draw a parallel between Java interface and monads seems likely to just create confusion IMHO.
I'm still a little iffy on why the monad concept isn'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't mean they are executed in that order. I think other languages don't make this easy.
I first encountered monads in OCaml. And the concept exists in other languages, although maybe not always explicitly by that name. Good luck, should be a good talk, Alex