Ronald Guida wrote: > Given the question "What is a Monad", I would have to say "A Monad is > a device for sequencing side-effects."
peterv <[EMAIL PROTECTED]> wrote: > "Side-effects" is a piece of linguistic cruft played fast-and-loose > by too many people in this game. "Sequencing" suffers the same > disease. Gregory Propf wrote: > I made this mistake myself at first too. It seems that the Monad = > "side effect machine" error is common to Haskell newbies. Probably > to do with the fact that the first thing every programmer wants to > do is write a hello world program and for that you need the IO Monad > which requires some explanation of how a Monad can allow for side > effects (at least the IO Monad). - Greg Eariler in this thread, I had a conversation with several people regarding monads and arrows. My goal was to try to come up with a brief explanation. I realized that "sequencing side-effects" is a simplistic and incorrect view, so now I'm thinking in terms of DSELs. I have heard that writing a monad tutorial is something people do when they finally understand monads. I interpret this observation to mean that either (1) monads (and arrows) are just difficult things, or (2) most of the existing explanations and tutorials are somehow inadequate or incomplete. My present goal is to understand monads well enough to be able to explain them to others. I wonder if it's possible to create a tutorial that explains monads well enough so that they just "make sense" or "click" for people. Here is the brief explanation I came up with: > Arrows and monads are abstract data types used to construct Domain > Specific Embedded Languages (DSELs) within Haskel. A simple arrow > provides a closed DSEL. A monad is a special type of arrow that > creates an open DSEL by allowing users to embed arbitrary Haskel > within it. Is this an accurate explanation? I hate to feed a fire, but is "Domain Specific Embedded Language" a well-defined phrase, or is it just another example of linguistic cruft? If DSEL is cruft, then is there a better way to briefly explain monads and arrows? Also, is this a /useful/ explanation, or have I simply hidden the complexity by invoking the concepts of ADTs and DSELs? -- Ron _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe