[erlang-questions] Parameterized module initialization

Tim Watson watson.timothy@REDACTED
Tue Jun 26 19:26:13 CEST 2012


I agree that something like functors would be a really nice abstraction for erlang.

On 26 Jun 2012, at 17:18, Anthony Ramine <n.oxyde@REDACTED> wrote:

> Le 26 juin 2012 à 16:56, Joe Armstrong a écrit :
> 
>> I like this mechanism.  This way of hiding additional data is very flexible.
>> 
>> I've used this in several programs, and the resulting code is easy to
>> understand. This nice thing is that using this you can make very nice
>> client APIs. For example, for string processing you might say
>> 
>>            Str = {ansi_string, "abc"},         or
>>            Str = {utf8_string, "u+1234"}
>> 
>> And then when you call
>> 
>>            Str:substr(1,4)
>> 
>> Get the correct behaviour depending upon the underlying string type ie
>> either ansi_string:substr(1,4,{ansi_string,"abc"}) or
>> utf8_sting:substr(1,4,{utf8_string, "u+1234"} ) will be called
>> 
>> If you write a program where strings might be in latin1, or utf8 or
>> something else you'd still
>> have to tag the string (as in say {latin1, "abc"}) so you knew what
>> the encoding was and still
>> have to call different modules depending upon the tag. This is what
>> the above mechanism does
>> so it's very nice for hiding the mess in polymorphic interfaces.
>> 
>> /Joe
> 
> I think it is quite ugly to have terms as module parameters; a more beautiful way in my opinion would be to have something like Caml functors, which are mappings from structures (modules in Erlang) to structures.
> 
> You would have a string functor which takes as a parameter a string implementation module, either ansi_string or utf8_string. You could then abstract the common stuff from ansi_ and utf8_ in string.
> 
> Regards,
> 
> --
> Anthony Ramine
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list