Recovering Purity with Comonads and Capabilities

by   Vikraman Choudhury, et al.

In this paper, we take a pervasively effectful (in the style of ML) typed lambda calculus, and show how to extend it to permit capturing pure expressions with types. Our key observation is that, just as the pure simply-typed lambda calculus can be extended to support effects with a monadic type discipline, an impure typed lambda calculus can be extended to support purity with a comonadic type discipline. We establish the correctness of our type system via a simple denotational model, which we call the capability space model. Our model formalizes the intuition common to systems programmers that the ability to perform effects should be controlled via access to a permission or capability, and that a program is capability-safe if it performs no effects that it does not have a runtime capability for. We then identify the axiomatic categorical structure that the capability space model validates, and use these axioms to give a categorical semantics for our comonadic type system. We then give an equational theory (substitution and the call-by-value β and η laws) for the imperative lambda calculus, and show its soundness relative to this semantics. Finally, we give a translation of the pure simply-typed lambda calculus into our comonadic imperative calculus, and show that any two terms which are βη-equal in the STLC are equal in the equational theory of the comonadic calculus, establishing that pure programs can be mapped in an equation-preserving way into our imperative calculus.



There are no comments yet.


page 1

page 2

page 3

page 4


Introducing a Calculus of Effects and Handlers for Natural Language Semantics

In compositional model-theoretic semantics, researchers assemble truth-c...

Semantics of a Relational λ-Calculus (Extended Version)

We extend the λ-calculus with constructs suitable for relational and fun...

Logic of computational semi-effects and categorical gluing for equivariant functors

In this paper, we revisit Moggi's celebrated calculus of computational e...

On the Soundness of Coroutines with Snapshots

Coroutines are a general control flow construct that can eliminate contr...

Intersection Type Distributors

Building on previous works, we present a general method to define proof ...

Tracing sharing in an imperative pure calculus (Extended Version)

We introduce a type and effect system, for an imperative object calculus...

A Polymorphic RPC Calculus

The RPC calculus is a simple semantic foundation for multi-tier programm...
This week in AI

Get the week's most popular data science and artificial intelligence research sent straight to your inbox every Saturday.