Extending Functionality: gen_server_ext

Chris Pressey <>
Fri Mar 21 20:04:18 CET 2003

On Fri, 21 Mar 2003 11:22:01 +0100
"Vlad Dumitrescu (EAW)" <> wrote:

> Hello,
> > From: Jay Nelson [mailto:]  
> >Chris and Vlad discussed:
> >> Extensions to gen_server to support "behavers" and pseudo
> >> inheritance call chains ...

(aside: just to clarify: "behaver" is not a new thing, it's a coined term
for "a module which implements a behaviour"... which Erlangers write every
day, but don't seem to have a non-specific word for - they tend to use
the name of the specific behaviour that they're implementing as in "I've
written a gen_server" rather than "I've written a behaver for

> [...]
> What I'd like to be able to do is create a process by specifying
> several interfaces/behaviours it will support, a GUI related example
> might be for a button: I need let's say 'drawable', 'clickable',
> 'mouse_over'. Just by naming them, I get the functionality,




> and I can
> (if I want) to override some of the functionality to better suit the
> button's needs.

  before_draw(Button) ->
    % arbitrarily don't draw the button if it's on the right side
    case x(Button) of
      X when X > screen_width() / 2 ->
      _ ->


> Potential problem: how to ensure that these behaviours do not have
> overlapping interfaces? (i.e. message tags or callback names that are
> the same)

Prepend a tag?


More information about the erlang-questions mailing list