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