Many useful programming constructions can be expressed as monads. Examples include probabilistic modeling, functional reactive programming, parsing, and information flow tracking, not to mention effectful functionality like state and I/O. We present a type-based rewriting algorithm to make programming with arbitrary monads as easy as using ML's built-in support for state and I/O. Developers write programs using monadic values of type m τ as if they were of type τ, and our algorithm inserts the necessary binds, units, and monad-to-monad morphisms so that the program type checks. Coco is a prototype implementation of our approach for core ML. We will demonstrate how to take advantage of Coco to facilitate using monadic libraries in practice.
Nataliya Guts is a PostDoctoral researcher, working with Mike Hicks at the Programming Languages group of the University of Maryland. She obtained a PhD at the MSR-INRIA Joint Centre, and a License d'Informatique and Master's MPRI from the University Paris 6. Her research interests focus on typed programming languages and security.