[wg-camlp4] Request for feedback

Alain Frisch alain.frisch at lexifi.com
Thu Mar 14 08:34:47 GMT 2013

On 03/13/2013 10:32 PM, Leo White wrote:
> Sorry, what i meant was that it should be ([@id arg] expr) instead of
> ((@arg) expr). In other words, it should be square brackets like the
> other attributes.

Oh yes, sorry, of course.

> I do think that
>    let % lwt x = ...
> is potentially confusing. Maybe it would be better as
>    let . lwt x = ...
> since people nearly always write dots without spaces, and a dot
> obviously can't be an operator.

If people see examples written "let%lwt", they will probably do the 
same, don't you think?   "%" does not seem very common in OCaml code; I 
don't think people already have "bad habits" about it.  And if people 
insist to write "let % lwt", it will be because they believe it somehow 

I'm not very fond of "let.lwt".  The dot symbol has already so many 
different uses in OCaml...  At least "%" is quite rare and will thus be 
clearly noticed as an extension.

> Another posibility would be
>    let .% lwt x = ...

Do you believe it is worth making the syntax more heavy only to 
discourage (and not even prevent) people from potentially writing code 
with a style we don't like?

> It does seems like we're going from having a single extension syntax to
> having many extension syntaxes. I can see the benefit of "let % lwt"
> since that will probably be a common extension point (the same goes for
> "match % bit") but is there much to be gained from the other possible
> keyword extensions.

function%ext and try%ext are also probably useful.

And I can imagine examples where {%ext x1=e1; ...; xn=en} would be 
useful as well (see the "pre-polyrecord" example).

At this point, why not be uniform, and do the same for all kinds of 
expressions starting with a well-defined keyword or symbol, including 
the parenthesized expressions "begin%ext expr end" and "(%ext expr)". 
For other syntactic categories than expressions, this last form would be 
recognized (as the only syntax for extensions), instead of "[%ext 
expr]".  There is a single syntax.

> While "let % lwt" may be alright, I do think that
> ( % id expr )
> is a bad idea. It looks too much like a prefix operator. Also, having a
> two character delimiter that isn't a single token is different from
> every other two character delimiter in the langauge. It also means that
> you can't use precedence to resolve conflicts in the parser. Is there
> any real benefit in using (%id expr) instead of [%id expr]?

The benefit I can see is the uniformity with other forms of expressions:

    KW%id ...

where KW is the opening keyword/symbol (here "(") and ... the rest of 
the construction starting with KW.


More information about the wg-camlp4 mailing list