Well, no. It is still consistent behaviour among all other calls:
quote do
foo bar: 1, do: 10
end
# => {:foo, [], [[bar: 1, do: 10]]}
quote do
foo bar: 1 do
10
end
end
# => {:foo, [], [[bar: 1], [do: 10]]}
There are 2 reasons why for is special form and not “regular” macro:
- Compiler need to know that it is comprehension, so it can output Erlang comprehension as well
<<a <- binary>>syntax need special handling- Macros do not support variable arguments list (the same rules as any other call apply there as well)
So all of the above forces the Elixir to treat for as a “special thing” within parser itself.


















