Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Alan Schmitt <alan.schmitt@polytechnique.org>
To: "lwn" <lwn@lwn.net>, caml-list@inria.fr
Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News
Date: Tue, 11 Mar 2025 16:00:31 +0100	[thread overview]
Message-ID: <m2ldtbipdc.fsf@mac-03220211.irisa.fr> (raw)

[-- Attachment #1: Type: text/plain, Size: 19905 bytes --]

Hello

Here is the latest OCaml Weekly News, for the week of March 04 to 11,
2025.

Table of Contents
─────────────────

OCaml projects utilizing Category theory
Docker base images and OCaml-CI support for OCaml < 4.08
ocamlmig, a tool to rewrite ocaml code, and complement `[@@deprecated]'
Ortac 0.6.0 improve bug reporting
Dune Developer Preview Updates
ppxlib.0.36.0
I created an OCaml grammar for ANTLR4 (Earley parser compatible)
Melange 5.0
Other OCaml News
Old CWN


OCaml projects utilizing Category theory
════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ocaml-projects-utilizing-category-theory/16206/5>


Deep in this thread, Dmitrii Kovanikov announced
────────────────────────────────────────────────

  I started writing [a series of articles about Pragmatic Category
  Theory] in OCaml, and there's a repository with examples:

  • <https://github.com/chshersh/pragmatic-category-theory>

  If you're interested in a complete project, I made *CCL: Categorical
  Configuration Language* which leverages multiple Category Theory
  concepts:

  • [The Most Elegant Configuration Language by @chshersh]

  I'm currently working on a [GitHub TUI] project in OCaml but the usage
  of CT concepts is not that crazy there. For now, I only use Semigroup
  and Monoids (which some people don't even consider part of CT but just
  Abstract Algebra).


[a series of articles about Pragmatic Category Theory]
<https://chshersh.com/blog/2024-07-30-pragmatic-category-theory-part-01.html>

[The Most Elegant Configuration Language by @chshersh]
<https://chshersh.com/blog/2025-01-06-the-most-elegant-configuration-language.html>

[GitHub TUI] <https://github.com/chshersh/github-tui>


Docker base images and OCaml-CI support for OCaml < 4.08
════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/docker-base-images-and-ocaml-ci-support-for-ocaml-4-08/16229/1>


Mark Elvers announced
─────────────────────

  The [opam repository archival] process has set the minimum supported
  OCaml version to 4.08 _for opam repository_.  It logically follows
  that opam-repo-ci should only test against OCaml >= 4.08.

  The purpose of this post is to get a sense of whether the rest of the
  OCaml infrastructure should also adopt the same lower bound.  The
  current lower bound is 4.02.

  Specific examples include OCaml-CI.  Individual projects can already
  opt out of testing on older platforms by adding a lower bound in the
  opam file.

  Docker base images are built for all versions of OCaml used in the CI
  systems. These images are published weekly on Docker Hub.  We know
  that these images are also used by the community, but the pull counter
  is not broken down by individual tag.  Potentially only the latest
  OCaml versions are being used.

  Users impacted by packages which have been archived from opam
  repository can easily restore the packages by adding the archive
  repository to the opam switch.  This only needs to be done once.
  Users can build their own Docker base images, but they would need to
  be rebuilt periodically to keep them up to date.

  Would removing testing on < 4.08 in OCaml CI or removing the Docker
  base images < 4.08 impact you?


[opam repository archival]
<https://discuss.ocaml.org/t/opam-repository-archival-phase-2-ocaml-4-08-is-the-lower-bound/15965>


ocamlmig, a tool to rewrite ocaml code, and complement `[@@deprecated]'
═══════════════════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-ocamlmig-a-tool-to-rewrite-ocaml-code-and-complement-deprecated/16090/10>


v-gb announced
──────────────

  Hi,

  I released a new version of ocamlmig in opam, whose main change is to
  avoid reformatting everything in codebases that don't use
  ocamlformat. Instead, only subexpressions touched by a rewrite are
  reformatted.  It also requalifies identifier in more places to
  preserve their meaning (e.g. when replacing `string_of_int' by
  `Int.to_string', there might be an `Int' module in scope that's not
  `Stdlib.Int'. In such case, ocamlmig would more often replace
  `string_of_int' by `Stdlib.Int.to_string').

  Separately, I've thought about the recent addition of let+ operators
  in Cmdliner, and how one might migrate from the use of `$' to
  them. Concretetely, given:

  ┌────
  │ let bistro () (`Dry_run dry_run) (`Package_names pkg_names) ... = the code
  │ open Cmdliner
  │ let term = Term.(const bistro $ Cli.setup $ Cli.dry_run $ ...)
  └────

  you'd want to have instead:

  ┌────
  │ open Cmdliner
  │ let term =
  │   Term.(Syntax.(
  │     let+ () = Cli.setup
  │     and+ (`Dry_run dry_run) = Cli.dry_run
  │     and+ (`Package_names pkg_names) = ...
  │     ...
  │     in
  │     the code))
  └────

  ocamlmig can now transform code this way, at the tip of the ocamlmig
  repo (not the last release). You can see it [in the second commit in
  this branch] (and further mechanical cleanups in the commits with "…"
  bubbles), but to explain a bit:

  ┌────
  │ let bistro () (`Dry_run dry_run) (`Package_names pkg_names) ... = the code
  │ open Cmdliner
  │ let term = Term.(const bistro $ Cli.setup $ Cli.dry_run $ ...)
  └────

  is first turned into:

  ┌────
  │ open Cmdliner
  │ let term = Term.(const (fun () (`Dry_run dry_run) (`Package_names pkg_names) ... -> the code)
  │                  $ Cli.setup $ Cli.dry_run $ ...)
  └────

  which is then turned into the final code:

  ┌────
  │ open Cmdliner
  │ let term =
  │   Term.(Syntax.(
  │     let+ () = Cli.setup
  │     and+ (`Dry_run dry_run) = Cli.dry_run
  │     and+ (`Package_names pkg_names) = ...
  │     ...
  │     in
  │     the code))
  └────

  The first step is done using `ocamlmig replace -w -e 'const [%move_def
  __f] /// const __f''. In short, what this does is anytime it sees
  `const some-identifier', it tries to inline the definition of the
  identifier. In details, the left side of the `///' specifies the code
  to search for, and the right side what to replace it with. `const ...'
  searches for literally `const' applied to one argument. `[%move_def
  __f]' is trickier: it matches identifiers that are let-bound somewhere
  in the current file, removes said let binding, and recursively matches
  the right hand side of the binding against `__f'. Variables that start
  with two underscores name a term for use in the replacement
  expression.

  The second step is done with:

  ┌────
  │ ocamlmig replace -w \
  │   -e 'const (fun __p1 __p2 __p3 -> __body) $ __e1 $ __e2 $ __e3
  │       /// let open Syntax in let+ __p1 = __e1 and+ __p2 = __e2 and+ __p3 = __e3 in __body'
  └────

  This is longer, but given the previous explanation, it's hopefully
  fairly clear what this does. The only twist is that ocamlmig
  generalizes this search/replace for three elements into an n-ary
  version (implicitly, although perhaps it should be explicit).

  And that's it. So this is the full command that I used:

  ┌────
  │ ocamlmig replace -w \
  │   -e 'const [%move_def __f] /// const __f' \
  │   -e 'const (fun __p1 __p2 __p3 -> __body) $ __e1 $ __e2 $ __e3
  │       /// let open Syntax in let+ __p1 = __e1 and+ __p2 = __e2 and+ __p3 = __e3 in __body'
  └────

  which seems pretty reasonable considering the rewrite is somewhat
  sophisticated.

  In general, mechanizing a change can reduce the chance of accidentally
  modifying something, but in this specific case, ocamlmig also detects
  shadowing when moving code with `[%move_def]'. Shadowing would likely
  cause type errors or tests errors, but if it didn't, it'd be quite
  hard to catch during code review.

  Finally, if you want to try this out on your code, I'll note that
  `ocamlmig replace' is in flux, and that while the commands above work,
  obvious variations of them may not.


[in the second commit in this branch]
<https://github.com/tarides/dune-release/pull/503/commits>


Ortac 0.6.0 improve bug reporting
═════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-ortac-0-6-0-improve-bug-reporting/16232/1>


Nicolas Osborne announced
─────────────────────────

  Hi everyone!

  We - at Tarides - are very pleased to announce the release of the
  Ortac-0.6.0 packages for specification-driven testing!

  Ortac/QCheck-STM is a test generator based on the [QCheck-STM]
  model-based testing framework and the [Gospel] specification language
  for OCaml.

  In addition to generating QCheck-STM tests based on the Gospel
  specifications, `Ortac/QCheck-STM' computes and display a bug report
  in case of test failure.

  This report contains the piece of Gospel specification that has been
  violated, a runnable scenario to reproduce the bug and the expected
  returned value (if there is enough information in the specification to
  compute it).

  This release improves the reporting in two ways.

  First, the way we need to formulate the description of the expected
  returned value has been made more flexible (and fixed). The main
  limitation was about functions returning a boolean. Because of the
  coercion mechanism, Gospel often transforms equalities involving a
  boolean into a double implication. For example: `b = Sequence.mem
  t.contents a' is transformed into `b = true <-> Sequence.mem
  t.contents a'. (For the curious, this is because `Sequence.mem'
  returns a `prop', not a `bool', and we don't have equality on
  `prop'). `Ortac/QCheck-STM' now explores more patterns, including the
  double implication one, to try to find a suitable description of the
  returned value to use in the bug report.

  Secondly, and more importantly, the Gospel specification language
  supports partial functions (`Sequence.hd' is *not* defined on the
  empty sequence for example). When we translate calls to such function
  to OCaml, we raise an exception when the call is out of the function's
  domain. Now, that exception was captured by QCheck at runtime, making
  the test a failure as expected. But the Ortac runtime was then stopped
  before being able to build and send the bug report to QCheck for
  display to the user. That was sad, so I've fixed it. We can now make
  use of Gospel partial functions when writing specifications and enjoy
  the bug report computed by `Ortac/QCheck-STM'!

  You can install Ortac/QCheck-STM via opam (we also advise installing
  and using Ortac/Dune):

  ┌────
  │ $ opam install ortac-qcheck-stm ortac-dune
  └────

  You'll find more information in [Ortac/QCheck-STM documentation] and
  in The [Ortac/Dune readme].

  If you have any questions, please don't hesitate to ping me :-)

  Next release should be about making Ortac/QCheck-STM generate tests of
  a library in a parallel context (this is, after all, one of the
  *raison d'être* of the fantastic QCheck-STM test framework!).

  Happy testing!


[QCheck-STM] <https://github.com/ocaml-multicore/multicoretests>

[Gospel] <https://github.com/ocaml-gospel/gospel>

[Ortac/QCheck-STM documentation]
<https://ocaml-gospel.github.io/ortac/ortac-qcheck-stm/index.html>

[Ortac/Dune readme]
<https://github.com/ocaml-gospel/ortac/tree/main/plugins/dune-rules#dune-rules-plugin-for-ortac>


Dune Developer Preview Updates
══════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-dune-developer-preview-updates/15160/57>


Leandro Ostera announced
────────────────────────

  Hello everyone! :waving_hand: Hope you had a great end of 2024 and
  your 2025 is starting well too :D

  We've been hard at work at Tarides to improve the Dune Developer
  Preview, and we'd love to learn more about what your adoption hurdles
  have been, so here's a very short form you can fill to let us know
  what's up.

  Happy hacking! :two_hump_camel:

  <https://forms.gle/piaw12XBYUeaCmg56>


ppxlib.0.36.0
═════════════

  Archive: <https://discuss.ocaml.org/t/ann-ppxlib-0-36-0/16241/1>


Patrick Ferris announced
────────────────────────

  The ppxlib team is happy to announce the release of `ppxlib.0.36.0'!

  A full account of the changes can be found [on the 0.36.0 release].


[on the 0.36.0 release]
<https://github.com/ocaml-ppx/ppxlib/releases/tag/0.36.0>

OCaml 5.2 Internal AST
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  The main change in this release is that the internal AST used in
  ppxlib is now the same as OCaml 5.2's AST. Previously it was
  4.14.0. The internal AST dictates what features your ppx can and
  cannot generate. To avoid confusion, this does _not_ mean ppxlib only
  supports OCaml 5.2 and greater. Ppxlib still supports compilers
  starting at 4.08.0.

  *The bump to 5.2 has caused a lot of reverse dependencies to break* as
   the 5.2 AST represents functions differently ([see the Syntactic
   Function Arity RFC]). Many patches have already been sent to users of
   ppxlib in the past few months, but quite a few still remain.

  :warning: Ppx authors are advised to read [the wiki entry for
  upgrading to ppxlib.0.36.0]. :warning:

  Please do not hesitate to reach out if you need any help upgrading to
  `ppxlib.0.36.0'.


[see the Syntactic Function Arity RFC]
<https://github.com/ocaml/RFCs/pull/32>

[the wiki entry for upgrading to ppxlib.0.36.0]
<https://github.com/ocaml-ppx/ppxlib/wiki/Upgrading-to-ppxlib-0.36.0>


Other Changes
╌╌╌╌╌╌╌╌╌╌╌╌╌

  • Change `Location.none' to match the compiler's `Location.none' as of
    OCaml 4.08.
  • New ways to create context free rules using floating expansions –
    see [#560] for the details.
  • Add a `-raise-embedded-errors' flag to the driver. Setting this flag
    raises the first `ocaml.error' embedded in the final AST.
  • Export `Ast_pattern.fail' making it easier to write new
    pattern-matchers.
  • Improvements to `Ast_traverse.sexp_of' to be more concise.

  Do read the changes entry/release for all of the acknowledgments –
  thank you to everyone who contributed to this release of ppxlib! A
  special thanks from me to @NathanReb who has been a massive help
  getting this work over the line.

  Thank you to Tarides and Jane Street for funding my time on this
  release of ppxlib.


[#560] <https://github.com/ocaml-ppx/ppxlib/pull/560>


I created an OCaml grammar for ANTLR4 (Earley parser compatible)
════════════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/i-created-an-ocaml-grammar-for-antlr4-earley-parser-compatible/16246/1>


ao wang announced
─────────────────

  Hi everyone,

  I’ve created an ANTLR4 grammar for OCaml that supports Earley parsing.
  Feel free to use it, and any feedback or contributions are welcome!

  GitHub Repository:
  <https://github.com/WangAo0311/Antlr4-ocaml-earley-parser-grammar>


Melange 5.0
═══════════

  Archive: <https://discuss.ocaml.org/t/ann-melange-5-0/16247/1>


Antonio Nuno Monteiro announced
───────────────────────────────

  Dear OCaml users,

  I'm proud to announce the release of Melange 5.0

  Melange is a backend for the OCaml compiler that emits
  JavaScript. This release features improvements across a few areas,
  mostly targeting OCaml 5.3 support and JavaScript expressivity:

  • OCaml version support: we’re releasing Melange 5 with full support
    across a few OCaml versions: 4.14, 5.1, 5.2 and the recently
    released 5.3
    ‣ Melange uses a versioning scheme similar to Merlin’s: releases are
      suffixed with the OCaml version they support, e.g. 5.0.1-414,
      5.0.1-53, etc.
  • We're introducing build system-aware, type-safe support for
    JavaScript's [dynamic import], allowing to code split
    Melange-generated JavaScript bundles without sacrificing
    type-safety.
  • Melange can now express [discriminated unions], a JavaScript pattern
    that

  The [release announcement] blog post covers the changes in a lot more
  detail. Please give it a read.

  I'm excited to count on the support of our financial sponsors [Ahrefs]
  and the [OCaml Software Foundation], without which this release would
  not have been possible.


[dynamic import]
<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import>

[discriminated unions]
<https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes-func.html#discriminated-unions>

[release announcement]
<https://melange.re/blog/posts/announcing-melange-5>

[Ahrefs] <https://ahrefs.com/jobs>

[OCaml Software Foundation] <https://ocaml-sf.org/>


Other OCaml News
════════════════

From the ocaml.org blog
───────────────────────

  Here are links from many OCaml blogs aggregated at [the ocaml.org
  blog].

  • [OpenAI and structured outputs from OCaml]
  • [Feature Parity Series: Statmemprof Returns!]
  • [Announcing Melange 5]
  • [Learning OCaml: Functions without Parameters]


[the ocaml.org blog] <https://ocaml.org/blog/>

[OpenAI and structured outputs from OCaml]
<https://tech.ahrefs.com/openai-and-structured-outputs-from-ocaml-b198fcf701ca?source=rss----303662d88bae--ocaml>

[Feature Parity Series: Statmemprof Returns!]
<https://tarides.com/blog/2025-03-06-feature-parity-series-statmemprof-returns>

[Announcing Melange 5]
<https://melange.re/blog/posts/announcing-melange-5>

[Learning OCaml: Functions without Parameters]
<https://batsov.com/articles/2025/03/02/learning-ocaml-functions-without-parameters/>


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] <mailto:alan.schmitt@polytechnique.org>

[the archive] <https://alan.petitepomme.net/cwn/>

[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>

[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>

[Alan Schmitt] <https://alan.petitepomme.net/>


[-- Attachment #2: Type: text/html, Size: 34934 bytes --]

             reply	other threads:[~2025-03-11 15:00 UTC|newest]

Thread overview: 236+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-11 15:00 Alan Schmitt [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-04-15  9:51 Alan Schmitt
2025-04-08 13:14 Alan Schmitt
2025-04-01  9:12 Alan Schmitt
2025-03-25  8:06 Alan Schmitt
2025-03-18 10:18 Alan Schmitt
2025-03-04 14:01 Alan Schmitt
2025-02-25 10:36 Alan Schmitt
2025-02-18 14:33 Alan Schmitt
2025-02-11  7:17 Alan Schmitt
2025-02-04 12:05 Alan Schmitt
2025-01-28 13:24 Alan Schmitt
2025-01-21 15:47 Alan Schmitt
2025-01-14  8:20 Alan Schmitt
2025-01-07 17:26 Alan Schmitt
2024-12-31  8:03 Alan Schmitt
2024-12-24  8:55 Alan Schmitt
2024-12-17 13:05 Alan Schmitt
2024-12-10 13:48 Alan Schmitt
2024-12-03 14:44 Alan Schmitt
2024-11-26  8:30 Alan Schmitt
2024-11-19  6:52 Alan Schmitt
2024-11-12 15:00 Alan Schmitt
2024-11-05 13:22 Alan Schmitt
2024-10-29 13:30 Alan Schmitt
2024-10-22 12:42 Alan Schmitt
2024-10-15 13:31 Alan Schmitt
2024-10-08 10:56 Alan Schmitt
2024-10-01 13:37 Alan Schmitt
2024-09-24 13:18 Alan Schmitt
2024-09-17 14:02 Alan Schmitt
2024-09-10 13:55 Alan Schmitt
2024-09-03  8:24 Alan Schmitt
2024-08-27  9:02 Alan Schmitt
2024-08-20  9:29 Alan Schmitt
2024-08-13 13:21 Alan Schmitt
2024-08-06  9:00 Alan Schmitt
2024-07-30 13:26 Alan Schmitt
2024-07-23 13:30 Alan Schmitt
2024-07-16  6:24 Alan Schmitt
2024-07-09  9:19 Alan Schmitt
2024-07-02  7:30 Alan Schmitt
2024-06-25 13:58 Alan Schmitt
2024-06-18 13:05 Alan Schmitt
2024-06-11 15:04 Alan Schmitt
2024-06-04 13:26 Alan Schmitt
2024-05-28  9:07 Alan Schmitt
2024-05-21 13:07 Alan Schmitt
2024-05-14 13:25 Alan Schmitt
2024-05-07  7:30 Alan Schmitt
2024-04-30  7:22 Alan Schmitt
2024-04-23 12:17 Alan Schmitt
2024-04-16 12:00 Alan Schmitt
2024-04-09  9:15 Alan Schmitt
2024-04-02 14:31 Alan Schmitt
2024-03-26  6:32 Alan Schmitt
2024-03-19 15:09 Alan Schmitt
2024-03-12 10:31 Alan Schmitt
2024-03-05 14:50 Alan Schmitt
2024-02-27 13:53 Alan Schmitt
2024-02-20  9:12 Alan Schmitt
2024-02-13  8:42 Alan Schmitt
2024-02-06 15:14 Alan Schmitt
2024-01-30 14:16 Alan Schmitt
2024-01-23  9:45 Alan Schmitt
2024-01-16 10:01 Alan Schmitt
2024-01-09 13:40 Alan Schmitt
2024-01-02  8:59 Alan Schmitt
2023-12-26 10:12 Alan Schmitt
2023-12-19 10:10 Alan Schmitt
2023-12-12 10:20 Alan Schmitt
2023-12-05 10:13 Alan Schmitt
2023-11-28  9:09 Alan Schmitt
2023-11-21  7:47 Alan Schmitt
2023-11-14 13:42 Alan Schmitt
2023-11-07 10:31 Alan Schmitt
2023-10-31 10:43 Alan Schmitt
2023-10-24  9:17 Alan Schmitt
2023-10-17  7:46 Alan Schmitt
2023-10-10  7:48 Alan Schmitt
2023-10-03 13:00 Alan Schmitt
2023-09-19  8:54 Alan Schmitt
2023-09-12 13:21 Alan Schmitt
2023-09-05  9:00 Alan Schmitt
2023-08-29 13:04 Alan Schmitt
2023-08-22  9:20 Alan Schmitt
2023-08-15 16:33 Alan Schmitt
2023-08-08  8:53 Alan Schmitt
2023-08-01  7:13 Alan Schmitt
2023-07-25  8:45 Alan Schmitt
2023-07-11  8:45 Alan Schmitt
2023-07-04  9:18 Alan Schmitt
2023-06-27  8:38 Alan Schmitt
2023-06-20  9:52 Alan Schmitt
2023-06-13  7:09 Alan Schmitt
2023-06-06 14:22 Alan Schmitt
2023-05-30 15:43 Alan Schmitt
2023-05-23  9:41 Alan Schmitt
2023-05-16 13:05 Alan Schmitt
2023-05-09 11:49 Alan Schmitt
2023-05-02  8:01 Alan Schmitt
2023-04-25  9:25 Alan Schmitt
2023-04-18  8:50 Alan Schmitt
2023-04-11 12:41 Alan Schmitt
2023-04-04  8:45 Alan Schmitt
2023-03-28  7:21 Alan Schmitt
2023-03-21 10:07 Alan Schmitt
2023-03-14  9:52 Alan Schmitt
2023-03-07  9:02 Alan Schmitt
2023-02-28 14:38 Alan Schmitt
2023-02-21 10:19 Alan Schmitt
2023-02-14  8:12 Alan Schmitt
2023-02-07  8:16 Alan Schmitt
2023-01-31  6:44 Alan Schmitt
2023-01-24  8:57 Alan Schmitt
2023-01-17  8:37 Alan Schmitt
2022-11-29 14:53 Alan Schmitt
2022-09-27  7:17 Alan Schmitt
2022-09-20 14:01 Alan Schmitt
2022-09-13  8:40 Alan Schmitt
2022-08-23  8:06 Alan Schmitt
2022-08-16  8:51 Alan Schmitt
2022-08-09  8:02 Alan Schmitt
2022-08-02  9:51 Alan Schmitt
2022-07-26 17:54 Alan Schmitt
2022-07-19  8:58 Alan Schmitt
2022-07-12  7:59 Alan Schmitt
2022-07-05  7:42 Alan Schmitt
2022-06-28  7:37 Alan Schmitt
2022-06-21  8:06 Alan Schmitt
2022-06-14  9:29 Alan Schmitt
2022-06-07 10:15 Alan Schmitt
2022-05-31 12:29 Alan Schmitt
2022-05-24  8:04 Alan Schmitt
2022-05-17  7:12 Alan Schmitt
2022-05-10 12:30 Alan Schmitt
2022-05-03  9:11 Alan Schmitt
2022-04-26  6:44 Alan Schmitt
2022-04-19  5:34 Alan Schmitt
2022-04-12  8:10 Alan Schmitt
2022-04-05 11:50 Alan Schmitt
2022-03-29  7:42 Alan Schmitt
2022-03-22 13:01 Alan Schmitt
2022-03-15  9:59 Alan Schmitt
2022-03-01 13:54 Alan Schmitt
2022-02-22 12:43 Alan Schmitt
2022-02-08 13:16 Alan Schmitt
2022-02-01 13:00 Alan Schmitt
2022-01-25 12:44 Alan Schmitt
2022-01-11  8:20 Alan Schmitt
2022-01-04  7:56 Alan Schmitt
2021-12-28  8:59 Alan Schmitt
2021-12-21  9:11 Alan Schmitt
2021-12-14 11:02 Alan Schmitt
2021-11-30 10:51 Alan Schmitt
2021-11-16  8:41 Alan Schmitt
2021-11-09 10:08 Alan Schmitt
2021-11-02  8:50 Alan Schmitt
2021-10-19  8:23 Alan Schmitt
2021-09-28  6:37 Alan Schmitt
2021-09-21  9:09 Alan Schmitt
2021-09-07 13:23 Alan Schmitt
2021-08-24 13:44 Alan Schmitt
2021-08-17  6:24 Alan Schmitt
2021-08-10 16:47 Alan Schmitt
2021-07-27  8:54 Alan Schmitt
2021-07-20 12:58 Alan Schmitt
2021-07-06 12:33 Alan Schmitt
2021-06-29 12:24 Alan Schmitt
2021-06-22  9:04 Alan Schmitt
2021-06-01  9:23 Alan Schmitt
2021-05-25  7:30 Alan Schmitt
2021-05-11 14:47 Alan Schmitt
2021-05-04  8:57 Alan Schmitt
2021-04-27 14:26 Alan Schmitt
2021-04-20  9:07 Alan Schmitt
2021-04-06  9:42 Alan Schmitt
2021-03-30 14:55 Alan Schmitt
2021-03-23  9:05 Alan Schmitt
2021-03-16 10:31 Alan Schmitt
2021-03-09 10:58 Alan Schmitt
2021-02-23  9:51 Alan Schmitt
2021-02-16 13:53 Alan Schmitt
2021-02-02 13:56 Alan Schmitt
2021-01-26 13:25 Alan Schmitt
2021-01-19 14:28 Alan Schmitt
2021-01-12  9:47 Alan Schmitt
2021-01-05 11:22 Alan Schmitt
2020-12-29  9:59 Alan Schmitt
2020-12-22  8:48 Alan Schmitt
2020-12-15  9:51 Alan Schmitt
2020-12-01  8:54 Alan Schmitt
2020-11-03 15:15 Alan Schmitt
2020-10-27  8:43 Alan Schmitt
2020-10-20  8:15 Alan Schmitt
2020-10-06  7:22 Alan Schmitt
2020-09-29  7:02 Alan Schmitt
2020-09-22  7:27 Alan Schmitt
2020-09-08 13:11 Alan Schmitt
2020-09-01  7:55 Alan Schmitt
2020-08-18  7:25 Alan Schmitt
2020-07-28 16:57 Alan Schmitt
2020-07-21 14:42 Alan Schmitt
2020-07-14  9:54 Alan Schmitt
2020-07-07 10:04 Alan Schmitt
2020-06-30  7:00 Alan Schmitt
2020-06-16  8:36 Alan Schmitt
2020-06-09  8:28 Alan Schmitt
2020-05-19  9:52 Alan Schmitt
2020-05-12  7:45 Alan Schmitt
2020-05-05  7:45 Alan Schmitt
2020-04-28 12:44 Alan Schmitt
2020-04-21  8:58 Alan Schmitt
2020-04-14  7:28 Alan Schmitt
2020-04-07  7:51 Alan Schmitt
2020-03-31  9:54 Alan Schmitt
2020-03-24  9:31 Alan Schmitt
2020-03-17 11:04 Alan Schmitt
2020-03-10 14:28 Alan Schmitt
2020-03-03  8:00 Alan Schmitt
2020-02-25  8:51 Alan Schmitt
2020-02-18  8:18 Alan Schmitt
2020-02-04  8:47 Alan Schmitt
2020-01-28 10:53 Alan Schmitt
2020-01-21 14:08 Alan Schmitt
2020-01-14 14:16 Alan Schmitt
2020-01-07 13:43 Alan Schmitt
2019-12-31  9:18 Alan Schmitt
2019-12-17  8:52 Alan Schmitt
2019-12-10  8:21 Alan Schmitt
2019-12-03 15:42 Alan Schmitt
2019-11-26  8:33 Alan Schmitt
2019-11-12 13:21 Alan Schmitt
2019-11-05  6:55 Alan Schmitt
2019-10-15  7:28 Alan Schmitt
2019-09-03  7:35 Alan Schmitt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m2ldtbipdc.fsf@mac-03220211.irisa.fr \
    --to=alan.schmitt@polytechnique.org \
    --cc=caml-list@inria.fr \
    --cc=lwn@lwn.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox