defmodule Foo do def setup(funcs) do Code.compile_quoted(quote bind_quoted: [funcs: funcs] do defmodule RuntimeLookup do for {name, value} <- funcs, do: def unquote(name)(), do: unquote(value) end end) end def main do setup(foo: 42) IO.inspect RuntimeLookup.foo() end end Foo.main