[Haskell-cafe] What are side effects in Haskell?

Hans van Thiel hthiel.char at zonnet.nl
Sun Dec 28 11:44:30 EST 2008

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.

I'm starting to understand it now...thanks again to everybody for all
the helpful replies!

Best regards,

Hans van Thiel

More information about the Haskell-Cafe mailing list