defmodule Xplore.Actor do def loop(bhv) do receive do {:message, msg} -> bhv.(msg) loop(bhv) {:system, :become, bhv_n} -> loop(bhv_n) {:system, :quit} -> :quit end end def create(bhv) do spawn_link(fn -> loop(bhv) end) end def send_message(ac, msg) do send(ac, {:message, msg}) end def become(ac, bhv) do send(ac, {:system, :become, bhv}) end def stop(ac) do send(ac, {:system, :quit}) end end