In this case I would not necessarily create a module per type of event, but even if I did, I don't see it as a problem. Each event has several functions associated to them that that are part of the event interface. This functionality, coupled with behaviours could even provide something like the concept of an abstract class.<br>
<br>I would probably do what Mochiweb does for the accessors of an HTTP request (src/mochiweb_request.erl int the mochiweb package). The mochiweb_request:get/1 function looks like this:<br><br>get(socket) -><br>    Socket;<br>
get(method) -><br>    Method;<br>get(raw_path) -><br>    RawPath;<br>get(version) -><br>    Version;<br>get(headers) -><br>    Headers;<br>get(peer) -><br>    case inet:peername(Socket) of<br>    {ok, {Addr={10, _, _, _}, _Port}} -><br>
        case get_header_value("x-forwarded-for") of<br>        undefined -><br>            inet_parse:ntoa(Addr);<br>        Hosts -><br>            string:strip(lists:last(string:tokens(Hosts, ",")))<br>
        end;<br>    {ok, {{127, 0, 0, 1}, _Port}} -><br>        case get_header_value("x-forwarded-for") of<br>        undefined -><br>            "<a href="http://127.0.0.1">127.0.0.1</a>";<br>        Hosts -><br>
            string:strip(lists:last(string:tokens(Hosts, ",")))<br>        end;<br>    {ok, {Addr, _Port}} -><br>        inet_parse:ntoa(Addr)<br>    end;<br>[...]<br><br>This makes it really easy to deal with the data contained in a request, and you never have to worry about how it is stored in the tuple.<br>
<br>My only issue with the current syntax is that the variables from the parameterized module seem "magical", as you can't tell where they came from by just looking at the function.<br><br><br><br><div class="gmail_quote">
On Tue, Jul 1, 2008 at 10:11 PM, Richard A. O'Keefe <<a href="mailto:ok@cs.otago.ac.nz">ok@cs.otago.ac.nz</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
On 2 Jul 2008, at 8:59 am, Juan Jose Comellas wrote:<br>
<br>
-record(fs_channel_event, {..lots..,extra}).<br>
-record(fs_channel_answer_event, {..several..}).<br>
-record(fs_channel_hangup_event, {..several..}).<div class="Ih2E3d"><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
The code that receives the events is unnecessary cumbersome because it needs to work with a record within a record. If this was encapsulated within a parameterized module, it would become much cleaner.<br>
</blockquote>
<br></div>
I don't quite see how it would, unless, no, you _couldn't_<br>
be thinking of making a module instance for each channel?<br>
<br>
It's certainly not clear that so heavy a sledgehammer is<br>
needed for this nut.  Can you provide an example of the<br>
'unnecessarily cumbersome code' so we can see if it can<br>
be clarified another way?<br>
<br>
<br>
</blockquote></div><br>