%===== Crashes:
Y =
fun (M) ->
G = fun(F) -> M(fun(A) -> (F(F))(A) end) end,
G(G)
end.
Loop = fun (F) ->
fun () ->
receive {From,X} -> From ! X end, F()
end
end.
Pid = spawn(fun() -> (Y(Loop))() end).
Pid ! {self(), hi}. receive X -> X end.
%===== Runs:
Y =
fun (M) ->
G = fun(F) -> M(fun(A) -> (F(F))(A) end) end,
G(G)
end.
Func = fun (F) ->
fun (0) -> 1, receive X -> X end;
(N) -> receive {From,X} -> From ! X end, N * F(N-1)
end
end.
Pid = spawn(fun() -> (Y(Func))(200) end).
Pid ! {self(), hi}. receive X -> X end.