GenServer counter
Elixir
defmodule Counter do
use GenServer
def start_link(initial \\ 0) do
GenServer.start_link(__MODULE__, initial, name: __MODULE__)
end
def increment(by \\ 1), do: GenServer.cast(__MODULE__, {:increment, by})
def value, do: GenServer.call(__MODULE__, :value)
@impl true
def init(initial), do: {:ok, initial}
@impl true
def handle_cast({:increment, by}, count), do: {:noreply, count + by}
@impl true
def handle_call(:value, _from, count), do: {:reply, count, count}
end