[wg-camlp4] Pending issues

Alain Frisch alain.frisch at lexifi.com
Wed Feb 13 13:12:52 GMT 2013

On 2/12/2013 9:12 PM, Pierre Chambart wrote:
> I would also prefer to
> restrict that kind of annotation to a small subset of the expression
> language avoiding as much as possible duplication.

Just to be clear, do you propose to restrict attributes in general, or 
only those which will be reflected in runtime types?   There are several 
cases where one really wants to be able to use general expressions as 
attributes, such as the example given by Yaron:

          type t =
            { a : int with default(2), sexp_drop_if(fun x -> x = 2);
            } with sexp

One could imagine restricting attributes to structured constants, and 
one would have to write the expression as a string literal to be parsed 
explicitly by the ppx rewriter.  Two arguments against doing so:

   - You loose editor support (admittedly, attributes are likely to be 
short enough that we don't care).

   - You need to be more careful about the order in which ppx rewriters 
are applied. Imagine a variant of the example above:

    type t =
      { a : int with default(2), sexp_drop_if("fun x -> x = DEFAULT");
      } with sexp

  where DEFAULT is to be expanded by another ppx rewriter.  Then you 
need to ensure that the macro expander is run after "sexp", not before. 
  And one could build other examples where one really needs the macro 
expander to apply to the attribute's content before it is processed 
(which works only if the attribute content is parsed).


More information about the wg-camlp4 mailing list