-module(print_server). -export([start/0, get_fun/1]). start() -> spawn(fun() -> server(fun(X) -> X end) end). get_fun(Server) -> Server ! {get, self()}, receive {print_fun, Server, Fun} -> Fun after 5000 -> timeout end. server(Fun) -> receive {set, NewFun} -> server(NewFun); {get, Whom} -> Whom ! {print_fun, self(), Fun}, server(Fun); {say, Value} -> io:format("print_server: ~w~n", [Fun(Value)]), server(Fun); {say, Label, Value} -> io:format("~w: ~w~n", [Label, Fun(Value)]), server(Fun); {quit} -> true end.