Hello Here is the latest OCaml Weekly News, for the week of June 11 to 18, 2024. Table of Contents ───────────────── Your opam-repository PRs are now tested on Windows Forester 4.1 fun-sql 0.2.3 dream-html and pure-html 3.5.2 Control Structures, English translation of lectures by Xavier Leroy Ppxlib dev meetings Other OCaml News Old CWN Your opam-repository PRs are now tested on Windows ══════════════════════════════════════════════════ Archive: Kate announced ────────────── Following the merge of [Windows support for the compiler in opam-repository] and the [release of opam 2.2.0~beta3], I'm happy to announce that a basic Windows CI using Github Actions is now in use in opam-repository, so all your new PRs are now being tested on Windows too. This is a big milestone, however the upstream opam-repository hasn't been tested with Windows before and thus many packages lacking the proper availability metadata will fail to build in the next month or so. If you see a package that is definitely not going to be available on Windows, please do report it in the [opam-repository bug-tracker] or even better open a PR if you have the time. When opening such PRs/issues, it would help the maintainers to copy/paste the failing log in the PR description. Most such PRs should simply add the following line to the failing package(s): ┌──── │ available: os != "win32" └──── If you notice any issues in the Github Action itself or want to improve it, please feel free to open a PRs/issue for that too, the code is available in [opam-repository/.github/workflows/windows.yml]. [Windows support for the compiler in opam-repository] [release of opam 2.2.0~beta3] [opam-repository bug-tracker] [opam-repository/.github/workflows/windows.yml] Forester 4.1 ════════════ Archive: Jon Sterling announced ────────────────────── I am pleased to announce the release of [Forester 4.1] on opam, which is an OCaml utility to develop “Forests”, which are densely interlinked mathematical websites / Zettelkästen similar to the [Stacks project] or [Kerodon ]. You can see the [release notes] on my own [Forest]. There are a few new features, including a simplified command `forester init` to setup a fresh forest. Thanks to Kento Okura, Nick Hu, and Trebor Huang for their contributions to this release. [Forester 4.1] [Stacks project] [Kerodon ] [release notes] [Forest] fun-sql 0.2.3 ═════════════ Archive: Yawar Amin announced ──────────────────── I am happy to announce the initial release of fun-sql, a simple functional-style query library for SQLite and PostgreSQL. To use it with SQLite: To use it with PostgreSQL: Fun-sql is not an ORM, it's a query execution and data mapping library (sometimes called a micro-ORM). It does three things: 1. Create the prepared statement and encode the parameters 2. Execute the query 3. Decode the resultset into OCaml types using a set of combinators. Here's an example: ┌──── │ open Fun_postgresql │ │ module Note(Db : sig val db : Postgresql.connection end) = struct │ open Db │ │ type t = { id : int; txt : string } │ let ret = ret (fun row -> { id = int 0 row; txt = text 1 row }) │ │ (* Prepared statement: *) │ let edit = query db "update note set txt = $1 where id = $2" │ │ (* Use by simply calling it: *) │ let edit id txt = edit ~args:Arg.[int id; text txt] unit │ (* val edit : int -> string -> unit *) │ │ (* Prepared statement: *) │ let by_id = query db "select id, txt from note where id = $1" │ │ let by_id id = only (by_id ~args:Arg.[int id] ret) │ (* val by_id : int -> t *) │ end └──── The design enforces the use of prepared statements–indeed, with PostgreSQL, a prepared statement corresponding to a query can be created only _once,_ so you have to ensure that you use a pattern like the above. MySQL support is also desired and I will get to it at some point unless someone beats me to it! dream-html and pure-html 3.5.2 ══════════════════════════════ Archive: Yawar Amin announced ──────────────────── Pleased to announce the release of dream-html 3.5.2, which actually spawns a new package pure-html: This package offers the same functionality as dream-html, _except_ without a Dream dependency, so you can use whatever web server you like, or even use it for other applications than web servers. It works exactly the same way as dream-html, except the top-level module is `Pure_html': ┌──── │ open Pure_html │ open HTML │ │ let content = article [] [ │ p [] [txt "Header"]; │ p [] [txt "Body"]; │ ] └──── pure-html has a runtime dependency only on the `uri' package. Control Structures, English translation of lectures by Xavier Leroy ═══════════════════════════════════════════════════════════════════ Archive: unfode announced ──────────────── [Website]. Really learned a lot from the slides. For example, the most understandable definition of continuation I've ever seen: Given a control point in a program, its continuation is the sequence of computations that remain to be done once the execution reaches the given control point in order to finish the execution of the whole program. [Website] Ppxlib dev meetings ═══════════════════ Archive: Nathan Rebours announced ──────────────────────── This month's meeting is scheduled today, Tuesday June 18th, at 6:00PM CET. Sorry for posting the announcement so late! Here is the meeting agenda: • 5.2 AST bump • Driver Transform refactoring • 5.3 support ‣ Added a trunk CI build, we should be able to consider merging ‣ Still need documentation for releases • Driver anti-warning 34 code gen ‣ Still haven't heard from Janestreet, we need their feedback before moving forward with this • Ocamlfind support ‣ There seem to be a bug when a ppxlib based ppx is invoked directly using ocamlfind -package ‣ Is this something we want to actively maintain • Dune w/ ppx ‣ Nathan got back to it, hopefully it should be ready soon • Repo hygiene: issue triage ‣ We have a lot of issues, most of which are extremely old ‣ A lot of issues are actually questions on how to use ppxlib for ppx authors ‣ It's worth having a go at closing the irrelevant issues and have some classification system for the rest The meeting will be hosted on google meet here: You are welcome to join! Other OCaml News ════════════════ >From the ocaml.org blog ─────────────────────── Here are links from many OCaml blogs aggregated at [the ocaml.org blog]. • [Creating the SyntaxDocumentation Command - Part 2: OCaml LSP] • [MirageVPN server] [the ocaml.org blog] [Creating the SyntaxDocumentation Command - Part 2: OCaml LSP] [MirageVPN server] Old CWN ═══════ If you happen to miss a CWN, you can [send me a message] and I'll mail it to you, or go take a look at [the archive] or the [RSS feed of the archives]. If you also wish to receive it every week by mail, you may subscribe to the [caml-list]. [Alan Schmitt] [send me a message] [the archive] [RSS feed of the archives] [caml-list] [Alan Schmitt]