consideri il seguente codice Erlang:Come rendere il TChan di Haskell rinviare messaggi come le code di messaggi di Erlang possono?
-module(testit).
-export([testit/0]).
testit() ->
Pid = spawn(fun testit_proc/0),
Pid ! final,
Pid ! one,
Pid ! two,
io:format("Root finished~n").
testit_proc() ->
receive
one -> io:format("One~n");
two -> io:format("Two~n")
end,
receive
one -> io:format("One~n");
two -> io:format("Two~n")
end,
receive
one -> io:format("One~n");
two -> io:format("Two~n");
final -> io:format("Final~n")
end,
io:format("Spawn finished~n").
Il risultato è:
Root finished
One
Two
Final
Spawn finished
L'elaborazione del messaggio final
sostanza differito fino all'ultimo blocco di ricezione in virtù delle precedenti ricezione modelli non corrispondenti che Messaggio.
Come si fa con il TChan di Haskell?
Concordato. Queste semantiche non esistono nei pacchetti base 'Chan' o' TChan' - dovrai implementare una coda di differimento da solo. –