defmodule Plug do @callback doit(name :: term) :: term defmacro __using__(_opts) do quote location: :keep do def call_doit() do doit(__MODULE__) end end end end defmodule Instance do use Plug def doit(name) do name end end