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, 19 Aug 2025 14:20:46 +0200	[thread overview]
Message-ID: <m2v7mja4f5.fsf@mac-03220211.irisa.fr> (raw)

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

Hello

Here is the latest OCaml Weekly News, for the week of August 12 to 19,
2025.

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

httpcats, ocaml-h1, vif, and hurl: a webstack for OCaml 5
Why Lean 4 replaced OCaml as my Primary Language
Reminder: You Can Still Come to Warsaw for FUN OCaml
Other OCaml News
Old CWN


httpcats, ocaml-h1, vif, and hurl: a webstack for OCaml 5
═════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-httpcats-ocaml-h1-vif-hurl-a-webstack-for-ocaml-5/17104/1>


Calascibetta Romain announced
─────────────────────────────

  I am delighted to announce the release of `httpcats.0.1.0', `ocaml-h1'
  (including WebSockets support), and the experimental release of `vif',
  a web framework for OCaml 5, and `hurl', an HTTP client in OCaml.


`ocaml-h1'
╌╌╌╌╌╌╌╌╌╌

  [`ocaml-h1'] is an authorised fork of [http/af] (after explicit
  permission from its author) in order to continue its development and
  release process. It was created in May 2024 and now includes support
  for websockets (and connection upgrades) thanks to the work of @swrup.


[`ocaml-h1'] <https://github.com/robur-coop/ocaml-h1>

[http/af] <https://github.com/inhabitedtype/httpaf>


`httpcats', a HTTP client/server with [`miou']
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  It was in 2023 that we began experimenting with OCaml 5 and HTTP
  requests withthe [`httpcats'] project:

  <https://x.com/Dinoosaure/status/1710320603113095538>

  This project allowed us to consolidate some of our libraries, such
  as~mirage-crypto~, in order to move beyond OCaml 5 and, in particular,
  to resolve the few data-races we had (having started some of our
  projects before OCaml multicore was even mentioned).

  After some fairly extensive maintenance work, we were finally able to
  lay the groundwork for an OCaml HTTP client that can make parallel
  requests using Miou.

  `httpcats' has therefore improved over time and offers a fairly simple
  way to make HTTP requests in OCaml (thanks to our experience with
  [http-lwt-client]) and to implement an HTTP server that can handle
  incoming HTTP requests in parallel. The [documentation] has been
  improved and is particularly comprehensive (with examples) so that
  users have complete control over all the protocol layers required for
  communication with web service: from the Unix socket to the TLS
  /handshake/ (including ALPN negotiation), including domain name
  resolution.

  `httpcats' also partially synthesizes our work on
  protocols. Everything needed to communicate with web services is
  implemented in OCaml:

  • [`ocaml-tls'] is used for the TLS protocol
  • [`ocaml-h1'] and [`ocaml-h2'] are used for the HTTP protocol
    (`http/1.1' and `h2')
  • [`ocaml-dns'] and [`happy-eyeballs'] are used for domain name
    resolution and the ability to prefer IPv6 connections or, at best,
    the fastest TCP/IP connections

  Finally, benchmarking work has been initiated, the origins of which
  can be found [here], showing the results that can be achieved with
  `httpcats' as a server. The benchmark is reproducible and available
  [here], and here are the results we obtained (on AMD Ryzen 9 7950X
  16-Core Processor):

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   clients  threads  latencyAvg  latencyMax  latencyStdev  totalRequests 
  ───────────────────────────────────────────────────────────────────────
        16       16  47.43us     2.27ms      38.48us             5303700 
        32       32  71.73us     1.04ms      47.58us             7016729 
        64       32  140.29us    5.72ms      121.50us            7658146 
       128       32  279.73us    11.35ms     287.92us            7977306 
       256       32  519.02us    16.89ms     330.20us            7816435 
       512       32  1.06ms      37.42ms     534.14us            7409781 
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


[`miou'] <https://github.com/robur-coop/miou>

[`httpcats'] <https://github.com/robur-coop/httpcats>

[http-lwt-client] <https://github.com/robur-coop/http-lwt-client>

[documentation]
<https://ocaml.org/p/httpcats/latest/doc/httpcats/Httpcats/index.html>

[`ocaml-tls'] <https://github.com/mirleft/ocaml-tls>

[`ocaml-h1'] <https://github.com/robur-coop/ocaml-h1>

[`ocaml-h2'] <https://github.com/anmonteiro/ocaml-h2>

[`ocaml-dns'] <https://github.com/mirage/ocaml-dns>

[`happy-eyeballs'] <https://github.com/robur-coop/happy-eyeballs>

[here]
<https://discuss.ocaml.org/t/lwt-multi-processing-much-more-performant-than-eio-multi-core/16395>

[here] <https://github.com/TechEmpower/FrameworkBenchmarks/pull/10009>


`hurl', a command-line tool to make HTTP requests in OCaml
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  To complete our work, we have developed a tool that allows HTTP
  requests to be made from the command line: [`hurl']. This tool is
  still in the experimental phase, but it allows us to activate an
  improvement loop between `httpcats' and the real world by testing
  certain types of requests.

  Here is a screenshot of the tool (`hurl https://discuss.ocaml.org
  --print dishHrR'):

  <https://us1.discourse-cdn.com/flex020/uploads/ocaml/optimized/2X/c/c4ad56b5362ea166e3ca365e0ea4355a47ef3d11_2_1004x1000.png>

  The purpose of this tool is to facilitate the tests we would like to
  perform with a web server by allowing the user to specify the content
  of requests (and whether this content should be JSON or
  `multipart/form-data') and obtain a whole bunch of information such as
  the response given by the service, the server’s IP address, and the
  result of the TLS handshake.


[`hurl'] <https://github.com/robur-coop/hurl>


`vif', a simple web framework for OCaml 5
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  Finally, to complete our work, we have also developed a new web
  framework based on `httpcats' and `miou' in order to obtain a web
  server capable of handling parallel requests: [`vif']. Like `hurl',
  `vif' is still in the experimental stage. However, we are currently
  able to produce small web applications and we will present this
  project at the next [FUN OCaml session] (come along!).

  A tutorial explaining how to make a chatroom in OCaml is available
  [here].

  The objective of vif is to provide a small framework for developing
  web applications. In addition, it offers a tool called `vif', which is
  a *native* OCaml interpreter that allows you to launch a web server
  from an OCaml script. Here is a simple example from the command line:

  ┌────
  │ $ opam install -y vif hurl
  │ $ cat >main.ml <<EOF
  │ #require "vif" ;;
  │ 
  │ let default req server () =
  │   let open Vif.Response.Syntax in
  │   let field = "content-type" in
  │   let* () = Vif.Response.add ~field "text/html; charset=utf-8" in
  │   let* () = Vif.Response.with_string req "Hello World!" in
  │   Vif.Response.respond `OK
  │ ;;
  │ 
  │ let routes =
  │   let open Vif.Uri in
  │   let open Vif.Route in
  │   [ get (rel /?? nil) --> default ]
  │ 
  │ let () =
  │   Miou_unix.run @@ fun () ->
  │   Vif.run routes ()
  │ ;;
  │ EOF
  │ $ vif --pid vid.pid main.ml &
  │ $ hurl http://localhost:8080/ -p b
  │ Hello World!
  │ $ kill -SIGINT $(cat vid.pid)
  └────

  Like all projects in our cooperative, it is open to contributions and
  improvements. The workshop we will be hosting at FUN OCaml will be an
  opportunity for us and for you to participate in these projects.


[`vif'] <https://github.com/robur-coop/vif>

[FUN OCaml session] <https://fun-ocaml.com/>

[here] <https://robur-coop.github.io/vif/>


Conclusion
╌╌╌╌╌╌╌╌╌╌

  Based on the dates provided, it is clear that this was a substantial
  and lengthy undertaking. It is the result of the work of several
  individuals and our cooperative (both technical and social).

  We would like to thank everyone who participated in any way in the
  development of this software and its integration into the OCaml
  ecosystem (notably through miou’s support for certain libraries such
  as [caqti]).

  We hope that many of you will attend our workshop (for the FUN OCaml
  itself, and also to meet us) and hope that you will enjoy Vif in
  particular. If you like our work, you can also make a donation to our
  cooperative (via [GitHub] or directly using [an IBAN]).

  Happy hacking!


[caqti] <https://github.com/paurkedal/ocaml-caqti/pull/117>

[GitHub] <https://github.com/sponsors/robur-coop>

[an IBAN] <https://robur.coop/Donate>


Why Lean 4 replaced OCaml as my Primary Language
════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/why-lean-4-replaced-ocaml-as-my-primary-language/17109/1>


Shon announced
──────────────

  <https://kirancodes.me/posts/log-ocaml-to-lean.html>


Reminder: You Can Still Come to Warsaw for FUN OCaml
════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/reminder-you-can-still-come-to-warsaw-for-fun-ocaml/17110/1>


Sabine Schmaltz announced
─────────────────────────

  Hey everyone,

  we still have a few tickets left for FUN OCaml
  (<https://fun-ocaml.com>)!

  This is your chance to meet a lot of great OCaml folks, attend the
  talks on day 1, have some interesting discussions, and learn a lot in
  the hands-on workshops offered on day 2.

  If you haven’t used OCaml before: no problem, we have a beginner
  workshop to get you started!

  Best of all it’s free for attendees (admission + food included),
  thanks to our generous sponsors.

  Cheers Sabine


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

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

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

  • [Upcoming OCaml Events]
  • [Why I chose OCaml as my primary language]


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

[Upcoming OCaml Events] <https://ocaml.org/events>

[Why I chose OCaml as my primary language]
<https://xvw.lol/en/articles/why-ocaml.html>


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: 23328 bytes --]

             reply	other threads:[~2025-08-19 12:20 UTC|newest]

Thread overview: 254+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-19 12:20 Alan Schmitt [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-08-12 15:32 Alan Schmitt
2025-08-05  8:17 Alan Schmitt
2025-07-29  9:36 Alan Schmitt
2025-07-22 12:07 Alan Schmitt
2025-07-15 17:14 Alan Schmitt
2025-07-08 12:45 Alan Schmitt
2025-07-01 11:16 Alan Schmitt
2025-06-24 14:02 Alan Schmitt
2025-06-17  6:44 Alan Schmitt
2025-06-10 13:36 Alan Schmitt
2025-06-03  9:19 Alan Schmitt
2025-05-27  9:22 Alan Schmitt
2025-05-20 11:52 Alan Schmitt
2025-05-13  9:40 Alan Schmitt
2025-05-06  7:24 Alan Schmitt
2025-04-29  8:39 Alan Schmitt
2025-04-22 11:50 Alan Schmitt
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-11 15:00 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=m2v7mja4f5.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