Monads for functional programming
ML for the Working Programmer