[wg-camlp4] A new branch to experiment with extension points

Alain Frisch alain.frisch at lexifi.com
Mon Mar 4 20:43:08 GMT 2013

On 3/4/2013 8:09 PM, Leo White wrote:
>> Extensions on the same categories:
>>   [#lid expr]
> This delimiter isn't technically safe (it could be made safe but its
> probably not worth the effort), might I suggest [%lid expr] as an
> alternative.

Ah, I keep forgetting about #type pattern...  I'm fine with [%lid expr].

> How about including "Item" extensions "[%%lid expr]"? I would rather not
> force people to use "include [%id expr]". I can imagine syntax
> extensions that might want to be used as both a strucuture item and a
> module expression.

Well, the extension could always use a different lid to distinguish the 
two cases, but ok, it doesn't add too much complexity to support "item" 
extensions directly.

>>  type t =
>>    | A [@id expr] [@id expr]
>>    | B [@id expr] [@id expr] of ...
> I agree that we need a special syntax for variant constructor
> attributes. How about:
> type t =
>   | A with id, id(expr)
>   | B of ... with id(expr), id

This is a case where the standard syntax for attributes works well (if 
we put attributes before constructor arguments).  What's the argument in 
favor of a dedicated syntax?  (I like the fact that all attribute 
syntaxes look similar.)

> We could also allow this for convenient record label attributes.

Yes, it make sense.

> I think
> this syntax is already used in type-conv, it fits in with the "with"
> attributes for type declarations, and is a lighter syntax than the
> alternative.

What do you call lighter?  It uses fewer non-alphanumeric symbols, but 
it becomes more compact only with 4 attributes:

A with id(expr), id(expr), id(expr), id(expr)
A [@id expr] [@id expr] [@id expr] [@id expr]

How does type-conv distinguish attributes on the last constructors from 
attributes on the type itself?  (Where do we find the documentation for 
the syntax recognized by type-conv?)


More information about the wg-camlp4 mailing list