Of course, they have side effects. Side effects are what the computation does. Otherwise, they would simply make the box hot.
The difference between Haskell and most languages is that Haskell forces one to keep that impurity at the outer edges. It enforces that constantly, making programs easier to reason about.
I heard it explained succinctly lately: types are all of the possible inputs and outputs of a program while functions encapsulate the mutation. Excel, for example, is a purely functional language.
Of course, they have side effects. Side effects are what the computation does. Otherwise, they would simply make the box hot.
The difference between Haskell and most languages is that Haskell forces one to keep that impurity at the outer edges. It enforces that constantly, making programs easier to reason about.
I heard it explained succinctly lately: types are all of the possible inputs and outputs of a program while functions encapsulate the mutation. Excel, for example, is a purely functional language.