krzysztof-w
4/6/2016 - 9:20 PM

queue.ex

defmodule Queue do
  @functions :queue.module_info(:exports)

  Enum.map @functions, fn
    {:module_info, _} -> 0
    {name, 0} -> def unquote(:"#{name}")(), do: apply(:queue, unquote(name), [])
    {name, 1} -> def unquote(:"#{name}")(x), do: apply(:queue, unquote(name), [x])
    {name, 2} -> def unquote(:"#{name}")(x,y), do: apply(:queue, unquote(name), [y, x])
  end
end