On Sat, 2008-12-27 at 11:54 -0600, Jake McArthur wrote: > Hans van Thiel wrote: > > However, some functions in Haskell may have side effects, like printing > > something on the screen, updating a database, or producing a random > > number. These functions are called 'actions' in Haskell. > > Not really true (disregarding things like unsafePerformIO). I haven't > been following this thread, so I don't know if anybody else has > suggested this, but perhaps it would be helpful to distinguish between > evaluating expressions and performing actions. > > Evaluation is simply graph reduction, which is Haskell's only method of > computation. There are no side-effects when you evaluate an expression > (again, disregarding unsafePerformIO and company), even if that > expression evaluates to an IO action. > > To perform an action is to cause the side-effect which that action > represents. *You* never perform an action in Haskell. The runtime does. > All you do is say how to evaluate those actions. > > Essentially, what the IO monad does is give you a DSL for constructing > (by evaluation) effectful, imperative programs at runtime. The runtime > will cause your program to evaluate the next action, then perform it, > then cause your program to evaluate the next action, then perform it, > and so on. At no point is the purity of your program broken by this. > [snip]
I'm starting to understand it now...thanks again to everybody for all the helpful replies! Best regards, Hans van Thiel _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe