Being idealistic, I think this could be an improvement, but on the other hand, being realistic I know there’s just no chance to change GenServer (and probably for a good reason).
Fortunately, what you propose is already implemented in gen_statem which accepts a list of “actions” in return from state functions:
defmodule Statem do
@behaviour :gen_statem
def callback_mode(), do: :state_functions
def init(_args) do
{:ok, :none, :no_data}
end
def none({:call, from1}, {:pair, pid1}, _data) do
{:next_state, :waiting, {pid1, from1}}
end
def waiting({:call, from2}, {:pair, pid2}, {pid1, from1}) do
{:next_state, :none, :no_data, [{:reply, from1, pid2}, {:reply, from2, pid1}]}
end
end






















