[erlang-questions] Built In Types
Kostis Sagonas
kostis@REDACTED
Mon Apr 16 23:01:59 CEST 2012
On 04/16/2012 10:16 PM, maxim minin wrote:
> Hi Erlangers,
> i try to define a type "product" like:
>
> -type product :: 'A'|'B'|'C'.
>
> But the compiler complains"type product() already defined".
> At http://www.erlang.org/doc/reference_manual/typespec.html is "product" not in the list of built-in types.
> So i have two quetions:
>
> Is "product" really a built-in type?
Hmmm... Nice discrepancy detected! This was actually news to me.
Turns out that there are four atom names, which are not built-in types,
but are instead used internally by the type system and are in principle
defined for all arities. These are listed in lib/stdlib/src/erl_lint.erl
is_var_arity_type(tuple) -> true;
is_var_arity_type(product) -> true;
is_var_arity_type(union) -> true;
is_var_arity_type(record) -> true;
is_var_arity_type(_) -> false.
So, for the time being, you cannot use the atoms 'tuple', 'product',
'union' or 'record' as names of types. These should be a note of that in
the reference_manual (or perhaps revise the representation to use less
common atoms for some of these, e.g. '$$product').
Sorry for the inconvenience...
> Is it possible to show all built-in types in erlang shell?
Currently not.
Kostis
More information about the erlang-questions
mailing list