algaeff
algaeff copied to clipboard
🦠 Reusable components based on algebraic effects
🦠 Reusable Effects-Based Components
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.
API Stability
We use semantic versioning. Breaking changes will bump the major version number.
Components
- 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.
How to Use It
OCaml >= 5.0.0
You need OCaml 5.
Example Code
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 ()