krzysztof-w
4/6/2016 - 9:42 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