OCaml Weekly News

Previous Week Up Next Week


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

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.

Forester 4.1

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.

fun-sql 0.2.3

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: https://ocaml.org/p/fun-sqlite

To use it with PostgreSQL: https://ocaml.org/p/fun-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 *)

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

Yawar Amin announced

Pleased to announce the release of dream-html 3.5.2, which actually spawns a new package pure-html: https://ocaml.org/p/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

unfode announced


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.

Ppxlib dev meetings

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: https://meet.google.com/yxw-ejnu-cju

You are welcome to join!

Other OCaml News

From the ocaml.org blog


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.