[erlang-questions] Maps in typespecs (and dialyzer)

Björn-Egil Dahlberg egil@REDACTED
Wed Jan 7 17:55:10 CET 2015

On 2015-01-05 23:43, José Valim wrote:
> Hello everyone,
> The typespecs 
> <http://www.erlang.org/doc/reference_manual/typespec.html> documentation 
> says dialyzer does not yet use map pairs information (which is fine). 
> The issue is that it does not describe what are the semantic 
> implications of map pairs in types. To be clear, the following type:
>     #{foo => any()}
> should:
> 1) match maps containing only the key foo
> 2) match maps containing at least the key foo

We've had some debate on this. Especially regarding mandatory and/or 
optional fields.

 From my viewpoint your second point is the correct one. You must 
specify the fields and types that are needed for your function to succeed.

I don't think it should be an error to over specify the fields (more 
keys than needed). Perhaps you want to construct a -type with a map with 
several fields but different fields are used in different functions 
where you specify that you are using this type.

> Additionally, what would #{_ => _} mean in any of the schemas above?

This is essentially what we are saying today .. though i would refrain 
from specifying it with underscore, #{ any() => any() } is a bit clearer.
Our contract says we accept a map containing any keys with any values, 
which is not very useful but valid. The jury is still out on empty map 

// Björn-Egil

> *José Valim*
> www.plataformatec.com.br <http://www.plataformatec.com.br/>
> Skype: jv.ptec
> Founder and Lead Developer
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150107/27e25ca6/attachment.htm>

More information about the erlang-questions mailing list