Modules and function "encapsulation"

Silas Silva <>
Wed Sep 1 05:16:49 CEST 2010


Hello all.

I'm a newbie in Erlang and functional programming.  Just got amazed to
see how fast I could make a MVC application in Erlang, using its great
pattern matching capabilities (not present in mainstream imperative
languages) and other features.

A doubt regarding modules, though, is in my mind:

In my MVC application, the Model (for now, an interface to a Mnesia
database) has the start/0 (exported) function.  The Controller (which
imports Model's start/0) also defines its own start/0 function.  When
trying to compile the Controller, I got the following error:

    defining imported function start/0

I decided to make some research on my favourite search engine and found
this thread on an Erlang forum:
http://www.trapexit.org/forum/viewtopic.php?t=11131&view=previous&sid=8d05d8be807d18af632ad00ea13e7027

There, people talks about overloading.  I can have start/0 in one module
and start/1, start/2 etc. in another module, which "extends" the start
function, but I can't have two start/0 functions.  That is okay, but I
thought that start/0 for a module would be totally different from
start/0 from another module and both would not conflict.  So, why there
is the module prefixing syntax (controller:start()), -import and
-export?

How do you deal with that?  You just make functions name unique among
all modules?  This approach looks like in a big C program (e. g.: OS
monolithic kernel), where symbols cannot conflict because, even though
they are compiled in different .o files, the linker complains when
putting everything together.

Any recommendation?

Thanks!

-- 
Silas Silva


More information about the erlang-questions mailing list