
Yeah, the laws confused me for a while as well. Hint to guys writing Haskell documentation, we're not all doing CS phD you know ;-) We just want to get things done ;-)
teachers and tutorials making a fuss about some concept is the surest way to guarantee that learners will find that concept difficult (holds for Monads, functional i/o, Monad laws, Turing machines, higher order functions, and many other things [*]). the Monad type class tells you the interface (what operations you've got, and their types), the Monad laws tell you what all types implementing that interface should have in common. it is all just about getting things done!-) the monadic interface gives you two operations, one to throw things into a monad thing, and one to chain two monad things together. the monad laws tell you two useful facts about monad things thrown together in that way: whatever it is the monad does, anything just thrown into it will take no part in that action, and whichever way you use that chaining operation, the structure of chaining is irrelevant, only the ordering of chained monad things matters. hth?-) claus [*] digging out the original paper can often be surprisingly enlightening, in the algol way of the original being an improvement on all its successors. [**] "thing" is a technical term that would take too long to explain, closely related to those "apples" mentioned in another thread;-)