[erlang-questions] encapsulating types and dialyzer

Kostis Sagonas <>
Thu Sep 11 18:56:17 CEST 2008


Anthony Shipman wrote:
> Suppose I have a module MC that implements a collection type known as coll(). 
> Internally this is some record that I want to be private to the module.
> 
> The external functions in the interface mention the type coll(). So the 
> clients of the interface must also mention coll() if dialyzer is to check the 
> types.
> 
> As far as I can see the only way to do this is to put the coll() type into 
> a .hrl file. This exposes the record definition, and recursively every other 
> type that it depends on.
> 
> Is there a better way to do this? 

In the HiPE group, we have had extensive discussions about this issue. 
The solution we came up with is to allow module-qualified types, as in 
mc:col(), which can then be used in other modules.  This works in R12B-4 
but not in any previous version.

Currently, all types defined in a module are also implicitly exported -- 
this might change in a future version and modules might need to declare 
their exported types.

Kostis

PS. I should point out that the language of types and -spec declarations
     is currently an EEP.  Officially, it is not part of Erlang yet.



More information about the erlang-questions mailing list