From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=Jh/gNluV; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by plum.tunbury.org (Postfix) with ESMTP id 507C940115 for ; Tue, 9 Jun 2026 07:39:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=OPAObfXXCfTYExv1//JY94TLdK15R+c9lNJiN2RFkrc=; b=Jh/gNluVPWTxTI5rf6ySohAcQBfcuobGPd8vpqXmm69BRVzYRm9fbuSF ue27kNPT05Oz6aCi8V2nZiU53U3Zr5eYibFo61gcgJBs8vstr8JQQQiIQ hGGUYPkQ3VcGwaKiv/aZYMl8KHsyCm60BY5HpwRhtwDH38Xu79azkYoWW 8=; X-CSE-ConnectionGUID: tEH6N0zZRMyNXT3IHcYdSw== X-CSE-MsgGUID: vx/PnZsTRvCyIpkJS12xwA== Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=SoftFail smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@prod-sympa-app.inria.fr Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 128.93.162.27 as permitted sender) identity=mailfrom; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@prod-sympa-app.inria.fr) identity=helo; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@prod-sympa-app.inria.fr"; x-conformance=spf_only X-IronPort-AV: E=Sophos;i="6.24,195,1774306800"; d="asc'?scan'208,217";a="280459750" Received: from prod-sympa-app.inria.fr ([128.93.162.27]) by mail2-relais-roc.national.inria.fr with ESMTP; 09 Jun 2026 09:39:22 +0200 Received: by prod-sympa-app.inria.fr (Postfix, from userid 990) id 15FB2813B8; Tue, 9 Jun 2026 09:39:22 +0200 (CEST) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by prod-sympa-app.inria.fr (Postfix) with ESMTP id C2A3281265 for ; Tue, 9 Jun 2026 09:39:14 +0200 (CEST) X-CSE-ConnectionGUID: tYM6PZ4jQgS6yJcB6CNWjg== X-CSE-MsgGUID: vMlJeQ/IR5i//sXED0mBgg== IronPort-SDR: 6a27c320_AGXcu2QVfQzxzqv1Xpf3tnor2/jUE39cMRLVL2XFWN/0L+F ojmGOwmhD1+n4yi0y/360TBM8+eqVddVJUx5Lkg== X-ThreatScanner-Verdict: Negative X-IPAS-Result: =?us-ascii?q?A0G2BQCgwidqhSIeaIFahBZbKRsBbl8zBwhJhFiDT44lg?= =?us-ascii?q?RaQN4p8DYMHFiECDgcBAwEIBS4BGwEDAQIEAQEBAgECAYR/E40jAh8GAQQ0E?= =?us-ascii?q?wECBAMCAwEBAQEBAQEBAQEBCwEBAQQBAQECAQECBAMBAQEBAhABAQEBQEmGT?= =?us-ascii?q?w2CRVFxYAQDBjgBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQECBAgBBwwGRUADBgQGEwEBKQ8YIwMUAQYDAhEBNRcBEhQGAYIPW?= =?us-ascii?q?AGCIAICTwMFDAaZCJtEen8zgQGCDAEBBoEIPgMBARAP2kSBTRMJCYE1GIFYh?= =?us-ascii?q?BmCTQ8NASpJagIBAoRPhEEnD4FVRIEVNYI9BQJvgmECAQGBNgYBAU2DLoJpg?= =?us-ascii?q?iZ6EoIUOoFSBRsBJoEAY4QcgwuCbIJCLAFVExcLBwVegQgDKi8tbjIdgSM+F?= =?us-ascii?q?zRYGwcFgUqCJYEFhRIjHwM5gRWBfIEoZ2kVMTU/AwttPTcUG4sjECENgTBEG?= =?us-ascii?q?RcPgUwgDkINIQwyDC8PAQkZNhkKFgccHRccAysFBg0tA4RgjXckAQMqj16ie?= =?us-ascii?q?zQHhB+BYAYMiQmBJpYHhASBV4s9mC2BJiKYZCKCNocogSYJglqFJJA7CAuFR?= =?us-ascii?q?YF/I4FcMxowQ4IzATMJGC8cD1ePVIF4QX2CSVE7wz9CNQIBARoBIAcCBwEMB?= =?us-ascii?q?IVrAQGMBzOBSwEB?= IronPort-PHdr: A9a23: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 DFkCy8L0CJfUJmPjmVqvw== IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:YmRm16MXrgJh7cBcTv6jsMiBIKoaSvp037BL7TESdfUxSKb0qy nAppUmPHPP5Ar5O0tQ+uxoWpPhfZq0z/ccirX5Vo3NYOCJggSVBbAnxbSn6TztES/z+4dmpM JdWpk7Lsb/SXxzjcOS2njeLz/M+qjizJyV X-Talos-CUID: 9a23:vhPlO2/c3wblU9kLbRWVv1IlP54dQCHf9XjrfV6aAkw3Y5uqS1DFrQ== X-Talos-MUID: 9a23:60ZyTwoUadw8+56ydZMezy9HMOVl2uOPMh0M1tIdi+SobSlaNDjI2Q== X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.24,195,1774306800"; d="asc'?scan'208,217";a="148803917" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown X-MGA-submission: =?us-ascii?q?MDHhrHlcw9ypHdRihMwCpp2N5l07AyeXdylEUc?= =?us-ascii?q?g6ewUDpVh7WII+HcewCdS2kz4rqGaMibSYeJ+PA3LpXKtUd7RQUMAytG?= =?us-ascii?q?Kcym7ZY6regBxxkNz7SkiTx19xw0fweSYnADeb3PwbG+r/9QKJrRF6rj?= =?us-ascii?q?ru4vVD3OACVQprLKbAroF4hA=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jun 2026 09:39:13 +0200 Received: from mac-03220211.irisa.fr (mac-03220211.irisa.fr [131.254.21.249]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id 046FD1A52C; Tue, 9 Jun 2026 09:39:12 +0200 (CEST) From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 09 Jun 2026 09:39:09 +0200 Message-ID: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="===-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jun 9 09:39:12 2026 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.499998, queueID=246ED1A561 X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19526 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: Archived-At: --===-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: multipart/alternative; boundary="==-=-=" --==-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Here is the latest OCaml Weekly News, for the week of June 02 to 09, 2026. Table of Contents =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80 Richard Bird Distinguished Dissertation Award Announcing Pyro Caml: A Continuous Profiler for OCaml awso 0.9.1: Type-safe coverage for 400+ AWS APIs OCaml 4.14.3 for Plan 9 Call for Talk Proposals @ OCaml Workshop 2026 Ahrefs Grant Program for OCaml Old CWN Richard Bird Distinguished Dissertation Award =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90 Archive: Fran=C3=A7ois Pottier announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80 Hello fellow users of OCaml, If you or your students have defended a PhD in 2025 on a topic related to functional programming, then you may apply for the (new) Richard Bird Distinguished Dissertation Award. Announcement copied below. `=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D' CALL FOR NOMINATIONS Richard Bird Distinguished Dissertation Award 2025 Deadline: 31st August 2026 `=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D' OVERVIEW The Journal of Functional Programming is pleased to establish the Richard Bird Distinguished Dissertation Award, to recognise an outstanding PhD dissertation in functional programming. Richard Bird (1943-2022) was one of the leading figures in functional programming. He was a Professor in Oxford, where he founded the Algebra of Programming group, and served as Director of the Computing Laboratory. Richard is renowned for his many books and pearls on functional programming, which set a lasting standard for clear and elegant writing. It seems fitting that an award be established in his name to further encourage these values in the field. The award includes a prize of =C2=A31,000. Funding for the prize is supported by a generous donation from Richard himself to further the cause of functional programming. CRITERIA Eligible dissertations must have been completed in 2025. Depending on the institution, this may be the date of the viva, corrections being approved, graduation ceremony, or otherwise. The award is open to all topics within the remit of JFP, with a particular emphasis on dissertations that reflect Richard's own values of clarity, simplicity and elegance. For a dissertation to be considered for the award it should: =E2=80=A2 Reach a high standard of exposition; =E2=80=A2 Make a noteworthy contribution to the subject; =E2=80=A2 Place the results in the wider context of computer science. NOMINATIONS Please submit the following information to the award chair, graham.hutton@nottingham.ac.uk, by 31st August 2026: =E2=80=A2 Two letters of support, explaining why the dissertation should = be considered for the award. One letter should be from the advisor/supervisor, and one from an independent source with no conflict of interest with the candidate, such as an external examiner or other expert in the field. =E2=80=A2 A copy of the dissertation itself. AWARD COMMITTEE =E2=80=A2 Graham Hutton (chair), University of Nottingham =E2=80=A2 Matthew Flatt, University of Utah =E2=80=A2 Jeremy Gibbons, University of Oxford =E2=80=A2 Fran=C3=A7ois Pottier, INRIA =E2=80=A2 Wouter Swierstra, University of Utrecht =E2=80=A2 Ningning Xie, University of Toronto The JFP editors-in-chief serve as observers of the committee. `=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D' Announcing Pyro Caml: A Continuous Profiler for OCaml =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90 Archive: Austin Theriault announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80 Hey y'all, last year I gave a [workshop] on observability at Fun OCaml, and a few folks asked me what was available for continuous profiling, and I wasn't aware of any solutions that supported OCaml directly. Since then I got the opportunity to work on one, and put it into use in production over at Semgrep, and now after battle testing it for a few months I'm happy to announce [Pyro Caml] is now available, and on [opam]. I got a good excuse to use a lot of cool OCaml tools like ocaml-rs, the runtime event system, and memprof, so needless to say it was a bunch of fun to write this :slight_smile: . If you're interested in the details I have a blog post [here] covering them. Currently it only supports CPU profiling, but we're potentially going to add memory/gc profiling in the coming months. Enjoy! [workshop] [Pyro Caml] [opam] [here] awso 0.9.1: Type-safe coverage for 400+ AWS APIs =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Michael Bacarella announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80 Greetings OCaml enjoyers, Have you been annoyed with terraform plan telling you 10 minutes later that you have a typo? Are you frustrated with how type-ambiguous your cloud is? (Abe Simpson shaking fist at cloud) Or, maybe you wish you could have AWS libraries inside an ecosystem you trust. Well, this release is for you! I'm happy to announce `awso', a comprehensive AWS library. This was forked from `https://github.com/solvuu/awsm', which was never released to opam. `awso' provides typed OCaml bindings to AWS services generated from botocore's service definitions, so the compiler catches the typos and shape mismatches. The `awso' repo: What's in the tin =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C Typed clients for the full AWS surface area, generated from botocore 1.43.9 Four I/O backends: =E2=80=A2 `awso-eio' - Eio =E2=80=A2 `awso-async' =E2=80=94 Async =E2=80=A2 `awso-lwt' =E2=80=94 Lwt =E2=80=A2 `awso-sync' =E2=80=94 Synchronous (blocking) over libcurl, for = easy scripting and CLIs Also =E2=80=A2 `awso-cli': for fun, a kitchen-sink binary exposing every servi= ce as a composable subcommand, in the spirit of the Python aws CLI. (Ships as bytecode because linking \~400 native service libraries exceeds ARM64 executable size limits; yes really) Note: the AWS API is big. `opam install' may take awhile. An example using Eio =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 (* ec2_describe_instances.ml *) =E2=94=82 module Ec2 =3D Awso_ec2_eio =E2=94=82=20 =E2=94=82 let print_row a b c d =3D Printf.printf "%-16s %-15s %-39s %= -20s\n" a b c d =E2=94=82=20 =E2=94=82 let print_instance instance =3D =E2=94=82 let name =3D =E2=94=82 Option.bind instance.Ec2.Instance.tags (fun tags -> =E2=94=82 List.find_map =E2=94=82 (function =E2=94=82 | { Ec2.Tag.key =3D Some "Name"; value =3D Some v } -= > Some v =E2=94=82 | _ -> None) =E2=94=82 tags) =E2=94=82 in =E2=94=82 let instance_type =3D =E2=94=82 match instance.instanceType with =E2=94=82 | Some it -> Ec2.InstanceType.to_string it =E2=94=82 | None -> "" =E2=94=82 in =E2=94=82 print_row =E2=94=82 instance_type =E2=94=82 (Option.value instance.publicIpAddress ~default:"") =E2=94=82 (Option.value instance.ipv6Address ~default:"") =E2=94=82 (Option.value name ~default:"") =E2=94=82 ;; =E2=94=82=20 =E2=94=82 let main env =3D =E2=94=82 let cfg =3D Awso_eio.Cfg.get_exn ~env () in =E2=94=82 match Ec2.describe_instances ~cfg (Ec2.DescribeInstancesReque= st.make ()) with =E2=94=82 | Error e -> =E2=94=82 failwith =E2=94=82 (Printf.sprintf =E2=94=82 "Ec2.describe_instances: %s" =E2=94=82 (Yojson.Safe.to_string (Ec2.Ec2_error.to_json e))) =E2=94=82 | Ok { reservations; _ } -> ( =E2=94=82 let instances =3D =E2=94=82 reservations =E2=94=82 |> Option.value ~default:[] =E2=94=82 |> List.concat_map (function =E2=94=82 | { Ec2.Reservation.instances =3D None; _ } -> [] =E2=94=82 | { instances =3D Some instances; _ } -> instances) =E2=94=82 in =E2=94=82 match instances with =E2=94=82 | [] -> print_endline "no instances" =E2=94=82 | instances -> =E2=94=82 print_row "instance-type" "public ipv4" "public ipv6" "na= me"; =E2=94=82 print_row =E2=94=82 (String.make 16 '-') =E2=94=82 (String.make 15 '-') =E2=94=82 (String.make 39 '-') =E2=94=82 (String.make 20 '-'); =E2=94=82 List.iter print_instance instances) =E2=94=82 ;; =E2=94=82=20 =E2=94=82 let () =3D Eio_main.run main =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Major changes in the fork from awsm =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C =E2=80=A2 Replaced lightweight higher-kinded polymorphism with a functori= zed approach (architectural detail: end users don't need to use functors!) =E2=80=A2 Restructured into `aws/{eio,async,lwt,sync}/' so each backend s= hips only what it needs =E2=80=A2 Consolidated per-service opam packages into sub-libraries under= each backend, on advice from the opam-repository crew. opam install awso-async pulls in every service binding as awso-async. =E2=80=A2 Transport errors now raise instead of polluting the Result type; only AWS-side errors stay in Result, matching Async convention =E2=80=A2 Dropped Jane Street Core from the non-Async runtimes via a small Jane_compat shim; Yojson.Safe.t everywhere instead of ad-hoc JSON; Base is still required for some rewriters and other tooling, but still much lighter weight than all of Core =E2=80=A2 Codegen is committed to the tree, so `opam install' doesn't drag \~25 build-time packages into your dependency cone =E2=80=A2 Output shapes treat required as advisory, because AWS itself routinely omits fields it marks required (looking at you, AccessDeniedException with no Message). Input shapes still respect it. =E2=80=A2 Various [working examples here] Minimum OCaml 5.3.0 to install from opam, OCaml 4.14 if you bump your stack limit before building. See CHANGES.md for the full list, and TODO.md for things known to still be rough. [working examples here] A bit of history =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C OCaml's AWS bindings have a lineage that predates this fork by years, with substantial development at Solvuu and collaboration from Tarides. Special thanks to Jane Street for their contributions along the way. It was open-sourced a while back and has sat quietly since. `awso' is an attempt to dust it off, bring it forward to current OCaml, and give it a home where the community can utilize it. Genuine thanks to everyone whose work this builds on! There's a lot of good engineering under the hood that deserves to keep running. Help me get the credits right =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C= =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C The code in the public solvuu repo was copy/pasted over from an internal repository, so the public git history doesn't reflect everyone who contributed. If you worked on any earlier version and want to be credited, please reach out. Where it's going =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C 0.9.1 is meant as a release-candidate-quality baseline ahead of a 1.0.0. Near-term: working through TODO.md and more working examples. Issues and PRs welcome, particularly bug reports from real workloads. It works on 4.14 but you need to increase your stack size a bit to work around some non-TCO parts of the OCaml compiler. I'm trying to see if we can chunk things up differently to get it through opam-ci for OCaml 4.14. =E2=80=A2 Repo: =E2=80=A2 opam: opam install awso-eio (or -lwt, or -async, or -sync) Bear with me while I spin some things in TODO.md off into GitHub issues. But I'm also curious to hear what might be missing from this release for you. AI assistance disclosure =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C Most of this work is directly coded by multiple humans over several years. A bulk of my own work in the project was back in 2022 porting it to ppxlib, making it work in OCaml 5 and growing the supported services from a handful to hundreds (bugfixes, missing support, working around botocore spec errors). Most of this work happened before the age of LLMs. Remember when "generated code" meant /generated by OCaml/? This guy remembers. I've since recruited Claude Code with Opus 4.7 for the push towards an opam release: mostly in refactoring, catching up on the latest botocore spec, and reducing the dependency cone. I hereby declare I understand and can answer for every line of code in awso. Closing =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C I'm happy to hear feedback, especially on API ergonomics. <3 Michael OCaml 4.14.3 for Plan 9 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Eduardo Cavazos announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Hey y'all =F0=9F=99=8B=E2=80=8D=E2=99=82=EF=B8=8F I've been messing around with a port of OCaml 4.14.3 for Plan 9: The native compiler isn't supported yet. Just bytecode support, repl, etc. Call for Talk Proposals @ OCaml Workshop 2026 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90 Archive: Continuing this thread, Sudha Parimala announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 The website is now live at . Please refer to it for the latest information! The submission deadline is roughly three weeks away! Please consider submitting your work. Ahrefs Grant Program for OCaml =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Continuing this thread, Louis Roch=C3=A9 announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80 The recipient of the grants are: =E2=80=A2 [OCaml bindings for GTK 4] by Chris Armstrong =E2=80=A2 [LSP for menhir] by Federico Dal Pio Luogo =E2=80=A2 [Programmable Patterns for OCaml] by the team of Ningning Xie i= n the University of Toronto =E2=80=A2 [Update the WebAuthn OCaml library to specification level 3 from level 2 (2021)] by Robur =E2=80=A2 [Modernizing ocp-indent for OCaml 5.x] by ocamlpro =E2=80=A2 [Maintenance and Development of the Dream Web Framework] by Sebastian Willenbrink, =E2=80=A2 Introspectable OCaml, an OCaml variant (compile-time options) w= hich provides an improved debugging and profiling experience, by [Shogan.ai] (Frederic Bour and Thomas Refis) [OCaml bindings for GTK 4] [LSP for menhir] [Programmable Patterns for OCaml] [Update the WebAuthn OCaml library to specification level 3 from level 2 (2021)] [Modernizing ocp-indent for OCaml 5.x] [Maintenance and Development of the Dream Web Framework] [Shogan.ai] Old CWN =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 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] --==-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of June 02 to 09, 2026.

Richard Bird Distinguished Dissertation Award

Fran=C3=A7ois Pottier announced

Hello fellow users of OCaml, If you or your students have defended a PhD in 2025 on a topic related to f= unctional programming, then you may apply for the (new) Richard Bird Distin= guished Dissertation Award. Announcement copied below.

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

CALL FOR NOMINATIONS

Richard Bird Distinguished Dissertation Award 2025

Deadline: 31st August 2026

http://tinyurl.com/jfp-bird-a= ward

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

OVERVIEW

The Journal of Functional Programming is pleased to establish the Richard Bird Distinguished Dissertation Award, to recognise an outstanding PhD dissertation in functional programming.

Richard Bird (1943-2022) was one of the leading figures in functional programming. He was a Professor in Oxford, where he founded the Algebra of Programming group, and served as Director of the Computing Laboratory. Richard is renowned for his many books and pearls on functional programming, which set a lasting standard for clear and elegant writing. It seems fitting that an award be established in his name to further encourage these values in the field.

The award includes a prize of =C2=A31,000. Funding for the prize is supported by a generous donation from Richard himself to further the cause of functional programming.

CRITERIA

Eligible dissertations must have been completed in 2025. Depending on the institution, this may be the date of the viva, corrections being approved, graduation ceremony, or otherwise.

The award is open to all topics within the remit of JFP, with a particular emphasis on dissertations that reflect Richard's own values of clarity, simplicity and elegance. For a dissertation to be considered for the award it should:

  • Reach a high standard of exposition;
  • Make a noteworthy contribution to the subject;
  • Place the results in the wider context of computer science.

NOMINATIONS

Please submit the following information to the award chair, graham.hutton@nottingham.ac.uk, by 31st August 2026:

  • Two letters of support, explaining why the dissertation should be considered for the award. One letter should be from the advisor/supervisor, and one from an independent source with no conflict of interest with the candidate, such as an external examiner or other expert in the field.
  • A copy of the dissertation itself.

AWARD COMMITTEE

  • Graham Hutton (chair), University of Nottingham
  • Matthew Flatt, University of Utah
  • Jeremy Gibbons, University of Oxford
  • Fran=C3=A7ois Pottier, INRIA
  • Wouter Swierstra, University of Utrecht
  • Ningning Xie, University of Toronto

The JFP editors-in-chief serve as observers of the committee.

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

Announcing Pyro Caml: A Continuous Profiler for OCaml

Austin Theriault announced

Hey y'all, last year I gave a workshop on observability at Fun OCam= l, and a few folks asked me what was available for continuous profiling, an= d I wasn't aware of any solutions that supported OCaml directly.=20

Since then I got the opportunity to work on one, and put it into use in pro= duction over at Semgrep, and now after battle testing it for a few months I= 'm happy to announce Pyro = Caml is now available, and on opam.

I got a good excuse to use a lot of cool OCaml tools like ocaml-rs, the run= time event system, and memprof, so needless to say it was a bunch of fun to= write this :slight_smile: . If you're interested in the details I have a b= log post here covering them.

Currently it only supports CPU profiling, but we're potentially going to ad= d memory/gc profiling in the coming months. Enjoy!

awso 0.9.1: Type-safe coverage for 400+ AWS APIs

Michael Bacarella announced

Greetings OCaml enjoyers,

Have you been annoyed with terraform plan telling you 10 minutes later that= you have a typo? Are you frustrated with how type-ambiguous your cloud is?= (Abe Simpson shaking fist at cloud)

Or, maybe you wish you could have AWS libraries inside an ecosystem you tru= st.

Well, this release is for you!

I'm happy to announce awso, a comprehensive AWS library. This = was forked from https://github.com/solvuu/awsm, which was neve= r released to opam. awso provides typed OCaml bindings to AWS = services generated from botocore's service definitions, so the compiler cat= ches the typos and shape mismatches.

The awso repo: https://github.com/mbacarella/ocaml-awso

What's in the tin

Typed clients for the full AWS surface area, generated from botocore 1.43.9

Four I/O backends:

  • awso-eio - Eio
  • awso-async — Async
  • awso-lwt — Lwt
  • awso-sync — Synchronous (blocking) over libcurl, for= easy scripting and CLIs

Also

  • awso-cli: for fun, a kitchen-sink binary exposing every se= rvice as a composable subcommand, in the spirit of the Python aws CLI. (Shi= ps as bytecode because linking \~400 native service libraries exceeds ARM64= executable size limits; yes really)

Note: the AWS API is big. opam install may take awhile.

An example using Eio

(* e=
c2_describe_instances.ml *)
module Ec2 =3D Awso_ec2_eio

let print_row a b d =3D Printf.printf "%-16s  %-15s  %-39s  %-20s\n" a b c d

let print_instance =
instance =3D
  let name =3D
    Option.bind i=
nstance.Ec2.Instance.tags (fun tags ->
      List.find_m=
ap
        (function
          | { Ec2.Tag.key =3D Some "Name"; value =3D Some=
 v } -> Some v
          | _ -> None)
        tags)
  in
  let instance_type =3D
    match instanc=
e.instanceType with
    | Some it -> Ec2.InstanceType.to_string it
    | None -> ""
  in
  print_row
    instance_type
    (Option.value=
 instance.publicIpAddress "")
    (Option.value=
 instance.ipv6Address ~d=
efault:"")
    (Option.value=
 name ~default:"")
;;

let main env=
 =3D
  let cfg =3D Awso_eio.Cfg.get_exn ~env () in
  match Ec2.describe_instances ~cf=
g (Ec2.DescribeInstances=
Request.make ()) =
with
  | Error e ->
    failwith
      (Printf.spr=
intf
         "Ec2.describe_instances: %s"
         (Yojson.Safe.to_string (Ec2.Ec2_=
error.to_json e)))
  | Ok { reservations; _ } -> (
    let instances =3D
      reservations
      |> Option.value ~default:[]
      |> List.concat_map (function
        | { Ec2.Reservat=
ion.instances =3D None; _ } -=
> []
        | { instances =3D Some insta=
nces; _ } -> instances)
    in
    match instanc=
es with
    | [] -> print_endline "no instances"
    | instances ->
      print_row "instance-type" "public ipv4" "public ipv6" "name";
      print_row
        (String.m=
ake 16 '-')
        (String.m=
ake 15 '-')
        (String.m=
ake 39 '-')
        (String.m=
ake 20 '-');
      List.iter p=
rint_instance instances)
;;

let () =3D Eio_main.run main

Major changes in the fork from awsm

  • Replaced lightweight higher-kinded polymorphism with a functorized appr= oach (architectural detail: end users don't need to use functors!)
  • Restructured into aws/{eio,async,lwt,sync}/ so each backen= d ships only what it needs
  • Consolidated per-service opam packages into sub-libraries under each ba= ckend, on advice from the opam-repository crew. opam install awso-async pul= ls in every service binding as awso-async.
  • Transport errors now raise instead of polluting the Result type; only A= WS-side errors stay in Result, matching Async convention
  • Dropped Jane Street Core from the non-Async runtimes via a small Jane_c= ompat shim; Yojson.Safe.t everywhere instead of ad-hoc JSON; Base is still = required for some rewriters and other tooling, but still much lighter weigh= t than all of Core
  • Codegen is committed to the tree, so opam install doesn't = drag \~25 build-time packages into your dependency cone
  • Output shapes treat required as advisory, because AWS itself routinely = omits fields it marks required (looking at you, AccessDeniedException with = no Message). Input shapes still respect it.
  • Various working examples here

Minimum OCaml 5.3.0 to install from opam, OCaml 4.14 if you bump your stack= limit before building.

See CHANGES.md for the full list, and TODO.md for things known to still be = rough.

A bit of history

OCaml's AWS bindings have a lineage that predates this fork by years, with = substantial development at Solvuu and collaboration from Tarides. Special t= hanks to Jane Street for their contributions along the way. It was open-sou= rced a while back and has sat quietly since.

awso is an attempt to dust it off, bring it forward to current= OCaml, and give it a home where the community can utilize it. Genuine than= ks to everyone whose work this builds on! There's a lot of good engineering= under the hood that deserves to keep running.

Help me get the credits right

The code in the public solvuu repo was copy/pasted over from an internal re= pository, so the public git history doesn't reflect everyone who contribute= d. If you worked on any earlier version and want to be credited, please rea= ch out.

Where it's going

0.9.1 is meant as a release-candidate-quality baseline ahead of a 1.0.0. Ne= ar-term: working through TODO.md and more working examples. Issues and PRs = welcome, particularly bug reports from real workloads.

It works on 4.14 but you need to increase your stack size a bit to work aro= und some non-TCO parts of the OCaml compiler. I'm trying to see if we can c= hunk things up differently to get it through opam-ci for OCaml 4.14.

Bear with me while I spin some things in TODO.md off into GitHub issues. Bu= t I'm also curious to hear what might be missing from this release for you.

AI assistance disclosure

Most of this work is directly coded by multiple humans over several years. = A bulk of my own work in the project was back in 2022 porting it to ppxlib,= making it work in OCaml 5 and growing the supported services from a handfu= l to hundreds (bugfixes, missing support, working around botocore spec erro= rs). Most of this work happened before the age of LLMs. Remember when "gene= rated code" meant generated by OCaml? This guy remembers.

I've since recruited Claude Code with Opus 4.7 for the push towards an opam= release: mostly in refactoring, catching up on the latest botocore spec, a= nd reducing the dependency cone. I hereby declare I understand and can answ= er for every line of code in awso.

Closing

I'm happy to hear feedback, especially on API ergonomics.

<3 Michael

OCaml 4.14.3 for Plan 9

Eduardo Cavazos announced

Hey y'all =F0=9F=99=8B=E2=80=8D=E2=99=82=EF=B8=8F

I've been messing around with a port of OCaml 4.14.3 for Plan 9:

https://github.com/dharmate= ch/ocaml

The native compiler isn't supported yet. Just bytecode support, repl, etc.

3D"0b5d1dbf8b4ae9b3=

Call for Talk Proposals @ OCaml Workshop 2026

Continuing this thread, Sudha Parimala announced

The website is now live at https://ocaml.org/ocaml-workshop-2026. Please refer to it for the lat= est information!

The submission deadline is roughly three weeks away! Please consider submit= ting your work.

Ahrefs Grant Program for OCaml

Continuing this thread, Louis Roch=C3=A9 announced

The recipient of the grants are:

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 loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe to the= caml-list.

--==-=-=-- --=-=-=-- --===-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQFvBAEBCABZFiEE6lXof/BsSVW56ZmGBA0KO07S5ccFAmonwx4bFIAAAAAABAAO bWFudTIsMi41KzEuMTIsMCwzHxxhbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v cmcACgkQBA0KO07S5cdBrwgAtq1DBo6LmU9cvPd2a2t+y33DxVflTx8QgqW5KsMV 7Gemi8n2zbAkoGY7+dDMKAtXVg+LChdimoTF3M0yuapej+xH3AOxR4litTBwBJ2R 0/bPhsYT57Uh5Kuarel/WiBVHq5gF9pZLZH//kPbbu9EmA1/7JG/A+8RM4t+FjPd SOLBQo3yWcC3gH94xwTRxmOISzyllnr01/+JIiy2SevWavoM2GcP2jSGqW5w5oCW v3bITGsHNC4fUYSmLuTBlcIKYUVYrP8ZDlos257RA470ReBd92yduygcZqOd6dOA u5HtYg9pd+mOEWFfnzbXdu7A/iS3LTmopF67ug6OOXU5ig== =g6oq -----END PGP SIGNATURE----- --===-=-=--