
On Fri, Aug 17, 2007 at 10:38:12AM +0200, Kai Grossjohann wrote:
The part that I'm having trouble with is monads and the associated operators (liftm comes to mind, it seems to be somehow related). I read Hal Daume's tutorial. Do you have advice what else I can read to grok?
(And I'm having trouble to understand the relationship between "<-" and "=". Apparently, "<-" somehow implies that "statements" are "executed" in some order.
Sort of, but only really because it gives a name to the result of a computation, which might get used later (at which point the result needs to be known, so the computation needs to have been performed). Order of execution in Haskell is _always_ ultimately decided by data dependencies - whether you're in a monad or not.
But Haskell tries really hard to hide the fact that there are statements and that there is such as thing as execution.
Well, there aren't statements really, so it doesn't have to try at all. ;-) You might possibly find useful some slides I wrote for a talk I gave locally about monads. It's not perfect or the whole story, and will surely becoming increasingly embarassing to me the more I learn (I'm already cringing at several parts) - in particular I made the classic mistake of confusing "I sort of understand the I/O monad" with "I sort of understand monads". However, it might help. It might at least help you get to grips with the difference between = and <- in do blocks (and when to use each form - see slide 15), and also liftM (slide 17). :-) http://gimbo.org.uk/blog/2007/05/14/a-pragmatic-look-at-monads-in-haskell/ HTH, -Andy -- Andy Gimblett Computer Science Department University of Wales Swansea http://www.cs.swan.ac.uk/~csandy/