Summary: E / Erlang integration

Ulf Wiger (AL/EAB) <>
Mon Jun 12 11:12:33 CEST 2006


I think that even without sugar, it can be cleaned up a little:

%% @spec send(To, Request, Timeout, MatchFun) -> Result
%% @throws timeout

try e:send(RaceTrack, getPolePositionCar, 3000,
           fun(N) when N ==FarPolePositionCar ->
                io:format("My car is in pole position~n"),
                match;
              (_) -> no_match
           end) of 
   Result -> Result
   catch
      throw:timeout -> ...
end.

I'd rename the function to something other than send(), since the
asynchronous send-and-pray function in erlang is erlang:send(Dest, Msg).

I see no reason to create funs for anything but a filter function. This
fun should be passed to another process, and the return values passed
back as regular messages. Compare with gen_server call.

BR,
Ulf W

 
Michael FIG wrote:
>
> I retract my original suggestion of developing 
> special syntax for E message sending (the !< part), since 
> that can easily be accomplished by a library function 
> "Promise = e:send(CryptoCap, Message)".  However, the 
> when/catch construct of E would be clunky to use without some 
> syntactic sugar.
> 
> With sugar:
> 
>     promise_case e:send(RaceTrack, getPolePositionCar) of
>         FarPolePositionCar ->
>             io:format("My car is in pole position~n");
>         after 3000 ->
>             io:format("Timed out~n")
>         catch E ->
>             ok;
>     end.
> 
> without sugar:
> 
>     e:pcase(e:send(RaceTrack, getPolePositionCar),
>             fun (SomeFreshName) ->
>                  case SomeFreshName of
>                     FarPolePositionCar ->
>                         io:format("My car is in pole position~n"),
>                         matched;
>                     _ ->
>                         notmatched
>                  end
>             end,
>             3000, fun () -> io:format("Timed out~n"),
>             fun (E) -> ok end).



More information about the erlang-questions mailing list