[wg-camlp4] Request for feedback
Alain Frisch
alain.frisch at lexifi.com
Thu Mar 21 09:15:45 GMT 2013
On 03/15/2013 04:16 PM, Gabriel Scherer wrote:
> I suspect we could get some value, for example, of
>
> let at nowarn [x;y;z] = List.map normalize [x;y;z]
>
> (More generally I've been thinking about compiler pragmas, and those
> often don't need arguments.)
>
> I think the answer is yes, but I don't quite remember: if let[@foo
> bar] .. = ... in .. is accepted, do we also allow let[%foo bar] ... in
> ... as a shortcut for [%foo bar (let .. in ...)]?
No, currently let[%foo bar] ... in ... is not allowed.
I think we should move forward and make a decision concerning the
alternative syntax for attributes and extension nodes on opening
delimiters and keywords. As a reminder, the current version in the SVN
supports the following sugar for an EXPRESSION which starts with a
keyword or delimiter KW (EXPRESSION == KW REST):
Attributes:
KW[@id expr]...[@id expr] REST
---->
EXPRESSION[@id expr]...[@id expr]
Extension node:
KW%id REST
---->
[%id EXPRESSION]
Attributes on extension node:
KW%id[@id expr]...[@id expr] REST
---->
[%id EXPRESSION][@id expr]...[@id expr]
where KW can stand for:
(
(module
[
[|
assert
begin
for
fun
function
if
lazy
let
let module
let open
match
new
object
try
while
{
{<
I propose to choose between one of the following:
1. Continue with the current situation.
2. Completely get rid of this alternative "prefix" syntax for
attributes and extension points. This only affect parser.mly and can
easily be discussed again and added later. This would reduce the
changes to the concrete grammar (and would thus simplify supporting
attributes and extension points in Camlp4)
3. Keep the syntax, but only for real keywords, not opening delimiters
( [ [| { and {<.
4. Do something special for "let" (it has been argued that for other
constructions, the normal syntax of extension point does not add too
much overhead); to be detailed.
Note, even if we go with 2, we can still write:
let (x, y) [@lwt] = ... in
...
i.e. use (a postfix) attribute on the (first) pattern of the binding.
I'm now slightly in favor of 2, neutral between 1 and 3, and slightly
against 4.
Please share your opinion (and feel free to propose something else)!
Alain
More information about the wg-camlp4
mailing list