OPAM package: ocaml-monadic

Hello! I was just repackaging a little library for OPAM 2 the other day when one of the repository maintainers pointed out that I should probably make mention of it on this forum (given that I never have). The package name is “ocaml-monadic”; it provides ppx extensions for monadic syntax in a way that blends with OCaml’s existing grammar. Here’s a link:

I optimistically anticipate the following questions enough to provide answers:

Q1. Why?
A1. Because switching between monadic and non-monadic syntax shouldn’t require rewriting everything. Also because I wanted to learn PPX extensions in 2015. :slight_smile:

Q2. Does the library require or use any specific library when dealing with monads?
A2. No. It just assumes the locally-scoped use of the names “bind” and, in some cases, “zero”.

Q3. How is this different from Jane Street’s ppx_let library?
A3. There are some miscellaneous differences ("%map" in ppx_let vs. “%orzero” in ocaml-monadic), but they’re largely the same idea. Their first versions were released at roughly the same time.


Note that monadic and applicative notations will be directly supported by the compiler itself starting from 4.08 .


I hadn’t read about that; thanks for calling it out. :slight_smile: I note that, as is appropriate for a core language extension, the proposed feature set is quite conservative. Both ppx_let and ocaml-monadic support a larger set of monadic features (which is appropriate for a library). That said, I’ll have to bear in mind that later versions of OCaml should desugar to appropriate uses of let* in order to be compatible with whatever error hinting or other ppx packages might become available. Thanks again for the pointer!

1 Like

One upside to ocaml-monadic (and ppx_let and lwt_ppx) compared with 4.08’s let operators is support for binding in matches. While there is a PR for match operators in OCaml it’s not clear when it will land.