A hyperfunction is a continuation-like construction that can be used to implement communication in the
context of concurrency. Though it has been reinvented many times, it remains somewhat obscure: since its
definition by Launchbury et al., hyperfunctions have been used to implement certain algebraic effect handlers,
coroutines, and breadth-first traversals; however, in each of these examples, the hyperfunction type went
unrecognised.
We identify the hyperfunctions hidden in all of these algorithms, and we exposit the common pattern
between them, building a framework for working with and reasoning about hyperfunctions. We use this
framework to solve a long-standing problem: giving a fully-abstract continuation-based semantics for a
concurrent calculus, the Calculus of Communicating Systems. Finally, we use hyperfunctions to build a
monadic Haskell library for efficient first-class coroutines.
Wed 14 JanDisplayed time zone: Brussels, Copenhagen, Madrid, Paris change
10:30 - 12:10 | |||
10:30 25mTalk | Domain-Theoretic Semantics for Functional Logic Programming POPL Eddie Jones University of Bristol, Samson Main University of Bristol, Celia Mengyue Li University of Bristol, Jonathan Marriott University of Bristol, Alex Kavvos University of Bristol DOI | ||
10:55 25mTalk | Handling Scope Checks: A Comparative Framework for Dynamic Scope Extrusion Checks POPL Michael Lee University of Cambridge, UK, Ningning Xie University of Toronto, Oleg Kiselyov Tohoku University, Jeremy Yallop University of Cambridge DOI | ||
11:20 25mTalk | Hyperfunctions: Communicating Continuations POPL DOI Pre-print | ||
11:45 25mTalk | Lazy Linearity for a Core Functional Language POPL DOI Pre-print | ||