lib/counter_agent.ex

defmodule CounterAgent do
  def new do
    Agent.start_link(fn -> 0 end)
  end

  def click(pid) do
    Agent.get_and_update(pid, fn n -> {n + 1, n + 1} end)
  end

  def set(pid, new_value) do
    Agent.update(pid, fn _n -> new_value end)
  end

  def get(pid) do
    Agent.get(pid, fn n -> n end)
  end
end