<div dir="ltr">That's excellent news Kostis!<div><br></div><div>I have only one question/reservation:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>Another problem is related to the meaning of #{}. One would expect that this notation means "the empty map," but instead it means "any map".</div></blockquote><br><div>#{} in pattern matching also means "any map", so it may be confusing to have #{} in specs to mean the empty map, specially because both usages are often close to each other. For example:</div><div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>-spec increment(term(), #{}) -> #{}</div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>increment(Key, #{} = Map) -></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>  Map#{Key := maps:get(Key, Map) + 1}.</div><div><br></div></blockquote></div><div>I also understand that [] and {} in typespecs implies emptiness and making #{} mean "the empty map" would make the typespecs more consistent.<br></div><div><br></div><div>That said, maybe it would be better to not allow #{} altogether (deprecating it now and removing it later) and introduce an empty_map() construct? The empty_map() type is slightly more verbose but I don't expect it to be used frequently and, as such, the more explicit name is worth it. And if I understand the proposal correctly, both map() and #{_ => _} can still be used to represent any map, while #{_ := _} represents a non-empty map, so it feels all of our bases are covered.</div><div><br></div><div>Thank you,</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div><br></div><div><br></div><div><span style="font-size:13px"><div><span style="font-family:arial,sans-serif;font-size:13px;border-collapse:collapse"><b>José Valim</b></span></div><div><span style="font-family:arial,sans-serif;font-size:13px;border-collapse:collapse"><div><span style="font-family:verdana,sans-serif;font-size:x-small"><a href="http://www.plataformatec.com.br/" style="color:rgb(42,93,176)" target="_blank">www.plataformatec.com.br</a></span></div><div><span style="font-family:verdana,sans-serif;font-size:x-small">Skype: jv.ptec</span></div><div><span style="font-family:verdana,sans-serif;font-size:x-small">Founder and Director of R&D</span></div></span></div></span></div></div></div></div></div>
<br><div class="gmail_quote">On Mon, Apr 11, 2016 at 12:45 PM, Kostis Sagonas <span dir="ltr"><<a href="mailto:kostis@cs.ntua.gr" target="_blank">kostis@cs.ntua.gr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 03/04/2016 11:59 AM, Björn-Egil Dahlberg XB wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I did the initial work for maps in Dialyzer but that application is not<br>
really part of my work area. If you want to contribute to Dialyzer you<br>
should probably talk to Hans Bolinder, Kostis Sagonas and/or Stavros<br>
Aronis. Hans talked about increasing Dialyzers knowledge about map<br>
associations the other day but I don't think it is on his agenda at the<br>
moment.<br>
<br>
I don't think it will be supported in 19.0 either though I have no clue<br>
if Kostis or Stavros, or anyone else for that matter, is working on it.<br>
</blockquote>
<br>
<br>
Hijacking this thread to announce a proposal for a change in the type syntax related to maps.<br>
<br>
The relevant document is here:<br>
<br>
  <a href="https://gist.github.com/kostis/eaf4a06e643cf49314ba" rel="noreferrer" target="_blank">https://gist.github.com/kostis/eaf4a06e643cf49314ba</a><br>
<br>
We would appreciate feedback from the community at this point.<br>
<br>
The intention is for this change to be part of Erlang/OTP 19.0.<br>
<br>
<br>
Kostis<br>
<br>
PS. Most of the credit for this change goes to Magnus Lång.<br>
<br>
PS2. For those that would like to experiment with the new type syntax and use the new version of dialyzer, or just fancy reading code diffs, there is also a related pull request that implements all these:<br>
<br>
  <a href="https://github.com/erlang/otp/pull/1014" rel="noreferrer" target="_blank">https://github.com/erlang/otp/pull/1014</a><br>
<br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div>