[erlang-questions] Multiple types with the same name in Dialyzer

Kostis Sagonas <>
Thu May 26 11:24:58 CEST 2011

Anthony Ramine wrote:
> Hi,
> I have a type value/1 defined as `-type value(LabelT) :: ...` and I would
> like to have a type value/0 with a default LabelT type value like
> `-type value() :: value(binary())`. The file compiles just fine but Dialyzer
> complains that "Type value is already defined".
> This exception is thrown from dialyzer_utils:add_new_type/6 [1] because the arity
> is not a part of a type identity, you can see this in erl_types:type_is_defined/3 [2].
> What I really don't understand is that while the arity is not a part of it, whether
> the given type is opaque or not is, so you can have both `-type t()` and `-opaque t()`.
> So I have two questions:
> - Is being unable to have both type value/0 and value/1 a bug?
> - Does being able to have both type t opaque and non-opaque have any purpose?

Hi Antony,

We are aware of these issues and we are in the process of fixing them. 
Unfortunately, they require major surgery...

Sort answers to your questions:

  1. No -- just a current limitation that will be lifted soon, I hope.
  2. No -- it should be prohibited by erl_lint already; will happen.


More information about the erlang-questions mailing list