#Impure vs Pure Functions

In programming languages, functions can either be impure or pure.

#Impure (JavaScript)

Impure functions may read or write from external sources when called.

let x = 0 function addOne () { x = x + 1 } addOne() // Now x is 1 addOne() // Now x is 2 addOne() // Now x is 3

Each time addOne is called, it affects the variable x which is outside itself. You cannot predict its effects without knowing additional state of the program.

#Pure (Haskell)

Pure functions do not read or write from external sources. Every time you call a pure function with the same arguments, it will return the same result. Any state you want to act on must be passed into it as an argument.

addOne x = x + 1 addOne 0 -- Always returns 1 addOne 1 -- Always returns 2 addOne 2 -- Always returns 3

Haskell is purely functional.