paper

The essence of functional programming

  • Authors:

📜 Abstract

This paper explores the use monads to structure functional programs. No prior knowledge of monads or category theory is required. Monads increase the ease with which programs may be modified. They can mimic the effect of impure features such as exceptions, state, and continuations; and also provide effects not easily achieved with such features. The types of a program reflect which effects occur. The first section is an extended example of the use of monads. A simple interpreter is modified to support various extra features: error messages, state, output, and non-deterministic choice. The second section describes the relation between monads and the continuation-passing style. The third section sketches how monads are used in a compiler for Haskell that is written in Haskell. ([jgbm.github.io](https://jgbm.github.io/eecs762f19/papers/wadler-monads.pdf))

✨ Summary

Summary

Philip Wadler presents monads as a practical abstraction for structuring pure functional programs while controlling computational effects. Through an interpreter example, the paper demonstrates how error handling, state, output, and nondeterminism can be added with localized changes. It also relates monadic programming to continuation-passing style and describes its use in a Haskell compiler.

The paper’s subsequent influence is documented in both research and practice. A 1999 USENIX paper on domain-specific languages cites it as an accessible introduction to monadic programming and applies the same pattern to stateful computations. (usenix.org) A later review of functional programming identifies Wadler’s work as an important step in applying monads from denotational semantics to functional implementations and general program structuring. That review also connects monadic ideas with constructs such as asynchronous computations in F#, promises in JavaScript, futures in Scala, and LINQ in .NET. (academic.oup.com)

The paper therefore helped establish monads as a standard vocabulary for computational effects in functional-language research, particularly Haskell, and contributed to the wider transfer of functional-programming abstractions into mainstream language and library design. Bibliographic services record the work as a POPL 1992 conference paper by Philip Wadler, pages 1–14. (doi.org)