Note: This project is part of my PhD thesis from 2019 and has not been maintained. The artifact may not compile because it relies on outdated development versions of Multicore OCaml (now part of OCaml 5.0). I plan to revisit this work eventually and reimplement it in Scala 3, using effects as capabilities and capture checking.
Cartesius is a DSL for defining expressive n-way joins over asynchronous event sequences. Joins exists in different domains, e.g., stream-relational algebra, complex event patterns, (functional) reactive programming and concurrent programming (join calculus). With Cartesius, we can define join variants in a uniform and structured manner, solving the expression problem. The workhorse are algebraic effects and handlers, which we employ to interpret declarative join pattern specifications in different ways.
This repository features implementations of Cartesius in different languages:
-
Multicore OCaml in the
ocaml/
subfolder. -
Koka in the
koka/
subfolder. Please check out theold
branch for the last working version.
- I thank Nada Amin for collaborating with me on the initial Koka prototype.
Versatile Event Correlation with Algebraic Effects (ICFP 2018) by Oliver Bračevac, Nada Amin, Guido Salvaneschi, Sebastian Erdweg, Patrick Eugster and Mira Mezini (pdf).
Type-safe, Polyvariadic Event Correlation (draft, 2019) by Oliver Bračevac, Guido Salvaneschi, Sebastian Erdweg and Mira Mezini (pdf).