ocaml-multicore/effects-examples
{ "createdAt": "2015-05-20T15:25:24Z", "defaultBranch": "master", "description": "Examples to illustrate the use of algebraic effects in Multicore OCaml", "fullName": "ocaml-multicore/effects-examples", "homepage": "", "language": "OCaml", "name": "effects-examples", "pushedAt": "2024-05-18T07:31:32Z", "stargazersCount": 450, "topics": [], "updatedAt": "2025-11-22T09:22:24Z", "url": "https://github.com/ocaml-multicore/effects-examples"}OCaml effects examples
Section titled “OCaml effects examples”Examples to illustrate the use of algebraic effects in OCaml. See
- Effective Concurrency with Algebraic Effects
- Pearls of Algebraic Effects and Handlers
- Retrofitting Effect Handlers onto OCaml
Examples
Section titled “Examples”- A concurrent round-robin scheduler
- Mutable state
- ML-style refs
- Transactional state
- Asynchronous IO in direct-style
- Dynamic wind
- Deriving generator from any interator
- Promises
- Monadic reflection
- MVars
- Chameneos-redux
- Message-passing pipeline: Sieve of Eratostheneses
- Deep pipes
- Non termination from effects
- Continuation cloning is tricky
- A solution to the Same Fringe Problem
- Reverse-mode Algorithmic Differentiation
The original implementation of Multicore OCaml allowed a user to Obj.clone_continuation. This has been removed, the examples that used this are in the multishot directory. See this conversation about the removal of this feature. They now use the ocaml-multicont library.
- Delimcc encoding
- Nondeterminism
- Backtracking N-Queens
- Memoization
- A mathematical game: Nim
- Dynamic State
Running the examples
Section titled “Running the examples”To run the examples with OCaml, be sure to install Opam with these instructions. These examples use the new effect syntax introduced with OCaml 5.3 and onwards. If you wish to see the examples which used the underlying effect functions directly, please checkout the 5.1.1 tag of this repository instead.
# After cloning this repository, create a 5.3 switchopam updateopam switch create 5.3.0+trunkopam install . --deps-onlyRunning make will build all of the examples. If you want to run a single executable that is built with dune you can run:
$ dune exec -- ./<executable_name>.exeExternal examples
Section titled “External examples”These are other examples that utilise OCaml effect handlers that are not in this repo:
Citation
Section titled “Citation”If you are citing this work in an academic paper, please cite the PLDI 2021 paper “Retrofitting Effect Handlers onto OCaml”: https://dl.acm.org/doi/10.1145/3453483.3454039.