Skip to main content
    • Aa
    • Aa
  • Get access
    Check if you have access via personal or institutional login
  • Cited by 56
  • Cited by
    This article has been cited by the following publications. This list is generated based on data provided by CrossRef.

    Brucker, Achim D. and Wolff, Burkhart 2016. Tests and Proofs.

    Brunner, Julian and Lammich, Peter 2016. NASA Formal Methods.

    Devriese, Dominique Birkedal, Lars and Piessens, Frank 2016. 2016 IEEE European Symposium on Security and Privacy (EuroS&P). p. 147.

    Riechert, Maik Höner zu Siederdissen, Christian and Stadler, Peter F. 2016. Algebraic dynamic programming for multiple context-free grammars. Theoretical Computer Science, Vol. 639, p. 91.

    Berger, Ulrich Jones, Alison and Seisenberger, Monika 2015. Program extraction applied to monadic parsing. Journal of Logic and Computation, p. exv078.

    Biernacki, Dariusz Danvy, Olivier and Millikin, Kevin 2015. A Dynamic Continuation-Passing Style for Dynamic Delimited Continuations. ACM Transactions on Programming Languages and Systems, Vol. 38, Issue. 1, p. 1.

    Cherrueau, Ronan-Alexandre Douence, Remi and Sudholt, Mario 2015. 2015 IEEE Trustcom/BigDataSE/ISPA. p. 1037.

    Delaware, Benjamin Pit-Claudel, Clément Gross, Jason and Chlipala, Adam 2015. Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages - POPL '15. p. 689.

    Heunen, Chris and Karvonen, Martti 2015. Reversible Monadic Computing. Electronic Notes in Theoretical Computer Science, Vol. 319, p. 217.

    Li, Li Tang, Tony and Chou, Wu 2015. 2015 IEEE International Conference on Web Services. p. 487.

    Zhozhikashvili, A. V. 2014. Monads for the formalization of a pattern matching procedure. Programming and Computer Software, Vol. 40, Issue. 3, p. 117.

    Black, Andrew P. 2013. Object-oriented programming: Some history, and challenges for the next fifty years. Information and Computation, Vol. 231, p. 3.

    Mulry, Philip 2013. Notions of Monad Strength. Electronic Proceedings in Theoretical Computer Science, Vol. 129, p. 67.

    Zhang, Yingzhou Fu, Wei and Leung, H.K.N. 2013. Web service publishing and composition based on monadic methods and program slicing. Knowledge-Based Systems, Vol. 37, p. 296.

    Du Bois, Andre Rauber Pilla, Mauricio Lima and Duarte, Rodrigo Medeiros 2012. 2012 Third Workshop on Applications for Multi-Core Architecture. p. 24.

    Rompf, Tiark Amin, Nada Moors, Adriaan Haller, Philipp and Odersky, Martin 2012. Scala-Virtualized: linguistic reuse for deep embeddings. Higher-Order and Symbolic Computation, Vol. 25, Issue. 1, p. 165.

    Sakuma, Yuto Minamide, Yasuhiko and Voronkov, Andrei 2012. Translating regular expression matching into transducers. Journal of Applied Logic, Vol. 10, Issue. 1, p. 32.

    BORGSTRÖM, JOHANNES GORDON, ANDREW D. and PUCELLA, RICCARDO 2011. Roles, stacks, histories: A triple for Hoare. Journal of Functional Programming, Vol. 21, Issue. 02, p. 159.

    CHENEY, JAMES AHMED, AMAL and ACAR, UMUT A. 2011. Provenance as dependency analysis. Mathematical Structures in Computer Science, Vol. 21, Issue. 06, p. 1301.

    Richards, Dominic and Lester, David 2011. A monadic approach to automated reasoning for Bluespec SystemVerilog. Innovations in Systems and Software Engineering, Vol. 7, Issue. 2, p. 85.

  • Mathematical Structures in Computer Science, Volume 2, Issue 4
  • December 1992, pp. 461-493

Comprehending monads

  • Philip Wadler (a1)
  • DOI:
  • Published online: 01 March 2009

Category theorists invented monads in the 1960's to express concisely certain aspects of universal algebra. Functional programmers invented list comprehensions in the 1970's to express concisely certain programs involving lists. This paper shows how list comprehensions may be generalised to an arbitrary monad, and how the resulting programming feature can express concisely 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.

Linked references
Hide All

This list contains references from the content that can be linked to their source. For a full set of references and notes please see the PDF or HTML where available.

M. Barr and C. Wells (1985) Toposes, Triples, and Theories. Springer Verlag.

J. Fairbairn (1987) Form follows function. Software — Practice and Experience, 17(6) 379386.

M. Gordon R. Milner and C. Wadsworth (1979) Ediburgh LCF. LNCS 78, Springer-Verlag.

J. Hughes (1989) Why functional programming matters. The Computer Journal, 32(2) 98107.

S. Mac Lane (1971) Categories for the Working Mathematician. Springer-Verlag.

G. Plotkin (1975) Call-by-name, call-by-value, and the λ-calculus. Theoretical Computer Science, 1 125159.

J. Rees and W. Clinger , editors, (1986) The revised3 report on the algorithmic language Scheme. ACM SIGPLAn Notices, 21(12) 3779.

D. A. Schmidt (1985) Detecting global variables in denotational specifications. ACM Transactions on Programming Languages and Systems, 7 299310.

M. Spivey (1990) A functional theory of exceptions. Science of Computer Programming. 14(1) 2542.

D. A. Turner (1985) Miranda: A non-strict functional language with polymorphic types. In: Proceedings of the 2nd International Conference on Functional Programming Languages and Computer Architecture, Nancy, France, LNCS 201, Springer Verlag.

P. Wadler (1985) How to replace failure by a list of successes. In: 2nd Symposium on Functional Programming Languages and Computer Architecture, Nancy, LNCS 273, Springer-Verlag.

Recommend this journal

Email your librarian or administrator to recommend adding this journal to your organisation's collection.

Mathematical Structures in Computer Science
  • ISSN: 0960-1295
  • EISSN: 1469-8072
  • URL: /core/journals/mathematical-structures-in-computer-science
Please enter your name
Please enter a valid email address
Who would you like to send this to? *