Fascinating excursion in monads history
Fascinating excursion in monads history
The notion of monad comes from category theory. It first arose in the area of homological algebra, but later was recognised (due to the work of Kleisli and of Eilenberg and Moore) to have much wider applications.
Its importance emerged slowly: in early days, it was not even given a proper name, but called simply a "standard construction" or a "triple". The formulation used here is due to Kleisli.
Eugenio Moggi proposed that monads provide a useful
structuring tool for denotational semantics. He showed how lambda
calculus could be given call-by-value and call-by-name semantics in an
arbitrary monad, and how monads could encapsulate
a wide variety of programming language features such as state, exception handling, and continuations.
Independent of Moggi, but at about the same time, Michael Spivey proposed that monads provide a useful structuring tool for exception handling in pure functional languages, and demonstrated this thesis with an elegant program for term rewriting. He showed how monads could treat exceptions and non-deterministic choice in a common framework, thus capturing precisely a notion that I had groped towards years earlier.
Inspired byMoggi and Spivey, I proposed monads as a general technique for structuring functional programs. My early proposals were based on a special syntax for monads, that generalised list comprehensions. This was unfortunate, in that it led many to think a special syntax was needed.
This new presentation is designed to convey that monads can be profitably applied to structure programs today with existing languages.
A key observation of Moggi's was that values and computations should be assigned different types: the value type a is distinct from the computation type M a. In a call-by-value language, functions take values into computations (as in a -> M b); in a call-by-name language, functions take computations into computations (as in M a -> M b).
John Reynolds made exactly the same point a decade ago. The essence of Algol, according to Reynolds, is a programming language that distinguishes data types from phrase types. In his work data types (such as int) play the roles of values, and phrase types (such as int exp) play the role of computations, and the same distinction between call-by-value and call-by-name appears. These ideas form the basis for the design of Forsythe. But the vital unitM and bindM operations do not appear in Reynolds' work.
This is not the only time that John Reynolds has been a decade ahead of the rest of us. Among other things, he was an early promoter of continuation-passing style and the first to apply category theory to language design. One intriguing aspect of his recent work is the use of intersection types, so perhaps we should expect an upsurge of interest in that topic early in the next millenium.
-- "The essence of functional programming", Philip Wadler, University of Glasgow.
Comments
My reaction to your post was that there is something there and I would love to hear what it is. What do you think would happen if programmers broadened their audiences instead of keeping audiences as narrow as possible? What do you think would happen if programmers considered how they could communicate with either people who have solutions and ideas that might be useful to programmers, or with other programmers who might need more solutions?
Ingrown communication digs holes deeper, but does not bring in solutions or problem solvers into your realm.
Could you - like a historian, or a writer, or a philosopher - step back and state clearly why you have something important here? I suspect you might. But it is in a tightly taped up box.
thanks
Perhaps this is my fault that reader doesn't realize it all while reading post title, but titleclearly states that story will be about monads (obviously special term) -- is it not enough to notify about specialized audience?
Fascination in this excursion grows from the fact that usual things have unexpectedly long and rich history, learning from that people may found important knowledge and new points of views.
Right. People learn from histories, from unexpected applications, from generalizing outside their specialties, from turning mechanisms into fascinations.
Your title was clearly specialist. What is fascinating, however, may not be.
thanks for clarifying.