>Also, I find monad-based asynchronous programming to be quite tedious.
Have you tried using OCaml's monadic let expressions? It was introduced on verion 4.08 and they share similarity with F# computation expressions.
* https://jobjo.github.io/2019/04/24/ocaml-has-some-new-shiny-...
* https://caml.inria.fr/pub/docs/manual-ocaml/bindingops.html