8 notes &
Monads for functional programming - Philip Wadler
The use of monads to structure functional programs is described. Monads provide a convenient framework for simulating effects found in other languages, such as global state, exception handling, output, or non-determinism. Three case studies are looked at in detail: how monads ease the modification of a simple evaluator; how monads act as the basis of a datatype of arrays subject to in-place update; and how monads can be used to build parsers.
A nice introduction paper on Monads (handling side-effects in FP) for Haskell / semantics / FP folk.