Filinski, Andrzej, 1994. Representing monads. POPL '94: In Proceedings of the 21st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Association for Computing Machinery, New York, NY, USA, pp. 446–457.Abstract: We show that any monad whose unit and extension operations are expressible as purely functional terms can be embedded in a call-by-value language with “composable continuations”. As part of the development, we extend Meyer and Wand's characterization of the relationship between continuation-passing and direct style to one for continuation-passing vs. general “monadic” style. We further show that the composable-continuations construct can itself be represented using ordinary, non-composable first-class continuations and a single piece of state. Thus, in the presence of two specific computational effects - storage and escapes - any expressible monadic structure (e.g., nondeterminism as represented by the list monad) can be added as a purely definitional extension, without requiring a reinterpretation of the whole language. The paper includes an implementation of the construction (in Standard ML with some New Jersey extensions) and several examples.
Final shift for call/cc
Direct implementation of shift and reset
Call with Current Continuation Patterns
The Seasoned Schemer
Hyperfunctions
Communicating Continuations
BiRank
Towards Ranking on Bipartite Graphs
Axioms for Centrality
The igraph software package for complex network research
Cogen in six lines
Adding generic functions to Scheme
Handling control