Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra. Functional programmers invented list comprehensions in the 1970's to concisely express certain programs involving lists. This paper shows how list comprehensions may be generalised to an arbitrary monad, and how the resulting programming feature can concisely express in a pure functional language some programs that manipulate state, handle exceptions, parse text, or invoke continuations. A new solution to the old problem of destructive array update is also presented. No knowledge of category theory is assumed.
|
1415
|
The Definition of Standard ML
– Milner, Tofte, et al.
- 1990
|
|
1122
|
Introduction to Functional Programming
– Bird, Wadler
- 1988
|
|
522
|
Categories for the working mathematician
– Lane
- 1998
|
|
479
|
The Implementation of Functional Programming Languages
– Jones
- 1987
|
|
345
|
Computational lambda-calculus and monads
– Moggi
- 1989
|
|
334
|
Category theory for computing science
– Barr, Wells
- 1990
|
|
325
|
Introduction to Higher Order Categorical Logic
– Lambek, Scott
- 1986
|
|
278
|
Types, abstraction and parametric polymorphism
– Reynolds
- 1983
|
|
244
|
Why functional programming matters
– Hughes
- 1989
|
|
225
|
Call-by-name, call-by-value, and the -calculus
– Plotkin
- 1975
|
|
224
|
Theorems for free
– Wadler
- 1989
|
|
195
|
An introduction to the theory of lists
– Bird
- 1987
|
|
138
|
Call-by-name, call-by-value, and the λ-calculus
– Plotkin
- 1975
|
|
131
|
Miranda: A non-strict functional language with polymorphic types
– TURNER
- 1985
|
|
102
|
Linear types can change the world
– Wadler
- 1990
|
|
101
|
Continuation-passing, closure-passing style
– Appel, Jim
- 1989
|
|
89
|
Algorithmics -- towards programming as a mathematical activity
– Meertens
- 1987
|
|
80
|
Is there a use for linear logic
– Wadler
- 1991
|
|
77
|
to replace failure by a list of successes
– Wadler
- 1985
|
|
68
|
Single-threaded polymorphic lambda calculus
– Guzm'an, Hudak
- 1990
|
|
63
|
editors). Report on the Programming Language Haskell, A Non-strict Purely Functional Language (Version 1.2
– Hudak, Jones, et al.
- 1992
|
|
54
|
Integrating functional and imperative programming
– Gifford, Lucassen
- 1986
|
|
54
|
Detecting global variables in denotational specifications
– Schmidt
- 1985
|
|
39
|
On the relation between direct and continuation semantics
– Reynolds
- 1974
|
|
38
|
A functional theory of exceptions
– Spivey
- 1990
|
|
33
|
The Definition of Standard ML Version 2
– Harper, Milner, et al.
- 1988
|
|
32
|
Recursion Equations as a Programming Language
– Turner
- 1982
|
|
31
|
Expressing and reasoning about non-deterministic functional programs
– HUGHES, O’DONNELL
- 1989
|
|
29
|
Update analysis and the efficient implementation of functional aggregates
– Bloss
- 1989
|
|
21
|
Constructing natural language interpreters in a lazy functional language
– Frost, Launchbury
- 1989
|
|
21
|
A semantic model of reference counting and its abstraction (detailed summary
– Hudak
- 1986
|
|
17
|
A categorical approach to the theory of lists
– Spivey
- 1989
|
|
8
|
Higher order functions considered unnecessary for higher order programming
– Goguen
- 1988
|
|
5
|
editors). Report on the functional programming language Haskell
– Hudak, Wadler
- 1988
|
|
4
|
non-determinism, side-effects, and parallelism: a functional perspective
– Hudak, Arrays
- 1986
|
|
3
|
Form follows function
– Fairbairn
- 1987
|
|
3
|
A simple and efficient way to handle large data structures in applicative languges
– Holmstrom
- 1983
|
|
3
|
An abstract view of programming languges. Course notes
– Moggi
|
|
2
|
Axiomatising operational equivalence in the presence of side effects
– Mason, Talcott
- 1989
|