Examples to illustrate the use of algebraic effects in OCaml. See
- 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.
To run the examples with Multicore OCaml, be sure to install Opam with these instructions.
# After cloning this repository, create a 5.0.0 switch
$ opam update
# Add the alpha repository to get unreleased 5.0.0 compatible libraries
$ opam switch create 5.0.0+trunk --repo=default,alpha=git+https:://github.com/kit-ty-kate/opam-alpha-repository.git
$ opam install . --deps-only
$ make
This builds all of the examples. If you want to run a single executable that is build with dune
you can run:
$ dune exec -- ./<executable_name>.exe
These are other examples that utilise OCaml effect handlers that are not in this repo: