Hello guys,

Currently, Elixir map syntax does not support anything other than pairs and 
macro calls as explained here:

https://github.com/elixir-lang/elixir/issues/10964#issuecomment-832227864

Unfortunately, this restriction is at the parser level, so there's very 
little freedom when writing own macros.

My suggestion is to relax this restriction and to let the macros decide the 
interpretation for themselves. The compiler would be still free to fail if 
not happy with the resulting AST.

The use case that made me reach out is my destructuring library where I 
need the following syntax and not just for the lists and tuples, but for 
maps as well (the <~ operator implementation is mine):

%{ foo \\ 25} <~ assigns

or

%{ 
  false: dropped_keys \\ [], 
   true: kept_keys \\ []
} <~ Enum.group_by( all_keys, & &1 in keys)

Not having the ability to do this, my library implementation currently 
relies on the macro syntax at the expense of readability and in doing so 
it: a) diverges from the Elixir convention for optional arguments, and b) 
prohibits the user to use their macros in the left-side expression, as in:

%{ foo( 25)} <~ assigns

or

%{ 
  false: dropped_keys( []), 
   true: kept_keys( [])
} <~ Enum.group_by( all_keys, & &1 in keys)

It's true I could've opted for using the \\  operator for lists and tuples 
while keeping the macro call syntax for the maps but I didn't want to do it 
as the idea is to have a uniform way of declaring optional variables.

Please note that my library is just one example of why this may be useful 
and I am sure there are other people who would like more freedom in 
creating their own macros.

Thanks

PS. The library: https://github.com/DaTrader/extructure

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/85aff155-e88d-4ae4-9f01-1e8f713f1ef3n%40googlegroups.com.

Reply via email to