This library aims to collect reusable, general effects-based components we have seen when constructing our proof assistants using OCaml 5. All components here have appeared in various tutorials on algebraic effects; algaeff
wraps these well-known components into an OPAM package.
We use semantic versioning. Breaking changes will bump the major version number.
- Algaeff.State: mutable states
- Algaeff.Reader: read-only environments
- Algaeff.Sequencer: making a
Seq.t
- Algaeff.Mutex: simple locking to prevent re-entrance
- Algaeff.UniqueID: generating unique IDs
Effects-based concurrency (cooperative lightweight threading) was already tackled by other libraries such as Eio and Affect. This library focuses on the rest.
There are a few other useful functions:
- Algaeff.Fun.Deep.finally: call
continue
ordiscontinue
accordingly. - Algaeff.Fun.Shallow.finally_with: same as above, but for shallow effect handlers.
You need OCaml 5.
module S = Algaeff.State.Make (Int)
let forty_two = S.run ~init:100 @@ fun () ->
print_int (S.get ()); (* this will print out 100 *)
S.set 42;
S.get ()