Open
Description
Can we draw inspiration from Rust's Mutex to make Eio.Mutex
a bit more ergonomic? E.g. usage adapted from https://github.com/ocaml-multicore/eio#the-rest-mutex-semaphore-and-condition:
open Eio
let of_path = Mutex.create
let save m data =
Mutex.use_rw m ~protect:true @@ fun path ->
Path.save path data ~create:(`Or_truncate 0o644)
let load m = Mutex.use_ro m Path.load
We would need signatures like this:
module Mutex : sig
type _ t
val create : 'a -> 'a t
(** Create in an unlocked state holding the data. *)
val use_rw : protect:bool -> 'a t -> ('a -> 'b) -> 'b
(** Lock for read-write access. *)
val use_ro : 'a t -> ('a -> 'b) -> 'b
(** Lock for read access. *)
end
Having said that, I realize we don't have borrow/move checking in OCaml so we wouldn't get the same level of safety. But it should make it a bit more ergonomic as the key idea is that a mutex is always paired with its data.