quote を使うとめちゃくちゃな名前の関数でも定義できる。
fancy.exs
defmodule Fancy do
defmacro __using__(_) do
fancy_name = :"!#$%&'()_"
quote do
def unquote(fancy_name)() do
42
end
end
end
end
foo.exs
defmodule Foo do
use Fancy
end
$ iex -r fancy.exs -r foo.exs
iex> Foo."!#$%&'()_"
42