From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 6BB087F7AF for ; Sat, 10 Oct 2015 15:48:11 +0200 (CEST) IronPort-PHdr: 9a23:fLmRgxTbJ+M2nC5bSzeZLgaLvNpsv+yvbD5Q0YIujvd0So/mwa64YRKN2/xhgRfzUJnB7Loc0qyN4/ymBj1Lv8jJmUtBWaIPfidNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV3BPAZ4bt74BpTVx5zukbvip9uMMk4W2nKUWvBbElaflU3prM4YgI9veO4a6yDihT92QdlQ3n5iPlmJnhzxtY+a9Z9n9DlM6bp6r5YTGfayQ6NtRrVdCHw7KG0v/4W/vhDGSU6L52AAemQQiBtBRQbfukLURJD052HCu/Zh1TPSFIu+cKo3VDir6+0jHAfhlT0EOjIw9EnYj8VxiORQpxf39E83+JLdfIzAbKk2RajaZ95PHWc= Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=paurkedal@gmail.com; spf=Pass smtp.mailfrom=paurkedal@gmail.com; spf=None smtp.helo=postmaster@mail-ob0-f180.google.com Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of paurkedal@gmail.com) identity=pra; client-ip=209.85.214.180; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="paurkedal@gmail.com"; x-sender="paurkedal@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of paurkedal@gmail.com designates 209.85.214.180 as permitted sender) identity=mailfrom; client-ip=209.85.214.180; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="paurkedal@gmail.com"; x-sender="paurkedal@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-ob0-f180.google.com) identity=helo; client-ip=209.85.214.180; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="paurkedal@gmail.com"; x-sender="postmaster@mail-ob0-f180.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0BnAgA2FhlWlLTWVdFehGgGqmaGc4wYgVqDE4IKghoHOhIBAQEBAQEBARABAQEBBwsLCR8wgh+CIBEdARseAxIQDwImAiQBEQEFASI1h3YBAxKff4IIgTE+MYtJgWyCeYkjChknDVaEcQEFDoEUhVKMeoFFBZYTAXmMIJo3EiOBFygGgX9dgV08M4dqAQEB X-IPAS-Result: A0BnAgA2FhlWlLTWVdFehGgGqmaGc4wYgVqDE4IKghoHOhIBAQEBAQEBARABAQEBBwsLCR8wgh+CIBEdARseAxIQDwImAiQBEQEFASI1h3YBAxKff4IIgTE+MYtJgWyCeYkjChknDVaEcQEFDoEUhVKMeoFFBZYTAXmMIJo3EiOBFygGgX9dgV08M4dqAQEB X-IronPort-AV: E=Sophos;i="5.17,663,1437429600"; d="scan'208";a="182089369" Received: from mail-ob0-f180.google.com ([209.85.214.180]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 10 Oct 2015 15:48:10 +0200 Received: by obbbh8 with SMTP id bh8so81284677obb.0 for ; Sat, 10 Oct 2015 06:48:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=nbOEFAYSsyueifKEs4wSyOtQY3T0qSMxBnYEk9gp1GY=; b=WtEpm82RC0AeRQFFz9UHuHqlugG5sRmxCS6r3/nDfYBXiyEklAqpd6hO0R41hc9no8 4VP12WAPgHmy5gfSonCzk7oKqc6u1eppKRiGYorjF2CO07ACN6kvMC0Yp6oawfpSIioM X1Ei1+d3MOwHncuR6KeQYKekjNTVa3TQ4PX7HAMMf3B4V23TFf3zfdzN5VP1NzYvjO65 wDHb9BvVtJCUi78ohM7HGd+A9P9kgNWO/biGCagGa+E8kz+yxNqZ2FqP9D/DTskbb/Dx BhoNMJSxHTaCfC60yIOOkF+hEMXwpPSBj0w4fM8GR3NYxY7ujIUxfFH0aw+ccJ56vqBy Jp0g== MIME-Version: 1.0 X-Received: by 10.60.220.227 with SMTP id pz3mr10860143oec.13.1444484889192; Sat, 10 Oct 2015 06:48:09 -0700 (PDT) Received: by 10.202.92.136 with HTTP; Sat, 10 Oct 2015 06:48:09 -0700 (PDT) Date: Sat, 10 Oct 2015 15:48:09 +0200 Message-ID: From: "Petter A. Urkedal" To: caml users Content-Type: text/plain; charset=UTF-8 Subject: [Caml-list] Terser ppx syntax for common usage (like monads) Now that we're replacing camlp4 with ppx, we're also replacing e.g. lwt x = .... the longer let%lwt x = ... Now, that's not necessarily a bad thing, but the monad bind operation tends to be quite invasive, so I'd like to suggest adding a shorter syntax which the user could choose to map to their most pervasive ppx rewriter. I think a good candidate would be let* x = ... for* x = ... do ... done try* ... etc. One way to implement this would be to map kw* to kw%ast, and leave it to the ppx extensions to accept an option telling it whether to process "ast" tagged nodes or not. Alternatively, it could be a compiler option. My reason for choosing "*" is 1) it looks okay in my opinion, 2) it is only used as a binary operator, so it can't interfere with existing code, like e.g. "let!" could.