<div dir="ltr"><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">I think what's happening in this case is this…</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Dialyzer sees your code (using cons for the list) as…</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">main() -> [ #foo{x = 0} | [#foo{x = false} | []] ].</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">It then detects the third warning from your email (namely, that you're using <i>false</i> for something that should be an <i>integer</i>):</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><div style="font-family:Arial,Helvetica,sans-serif"><font face="monospace">foo.erl:9: Record construction</font></div><div style="font-family:Arial,Helvetica,sans-serif"><font face="monospace"> #foo{x :: false} violates the declared type of field x ::</font></div><div style="font-family:Arial,Helvetica,sans-serif"><font face="monospace"> integer()</font></div></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Therefore, the type of that second part of the list ([#foo{x = false} | []]) will be <i>none()</i>.</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">And that leads dialyzer to complain with the second warning that you see…</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><div style="font-family:Arial,Helvetica,sans-serif"><font face="monospace">foo.erl:8: Cons will produce an improper list since its 2nd argument is</font></div><div style="font-family:Arial,Helvetica,sans-serif"><font face="monospace"> none()</font></div></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Which, in time, produces the first warning…</div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><span style="font-family:monospace">foo.erl:7: Function main/0 has no local return</span><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif"><br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Hope this helps. </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 14, 2020 at 1:45 PM Jesper Eskilson <<a href="mailto:jesper.eskilson@klarna.com">jesper.eskilson@klarna.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi,</div><div><br>When dialyzer analyzes this program:<br><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><br></div><font face="monospace">-module(foo).<br></font><font face="monospace">-export([main/0]).</font><font face="monospace"><br></font><font face="monospace">-record(foo, {x :: integer()}).</font><font face="monospace"><br></font><font face="monospace">main() -><br></font><font face="monospace"> [ #foo{x = 0},<br></font><font face="monospace"> #foo{x = false} ].</font></blockquote></div><div><br></div><div>it says:<br><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><font face="monospace">foo.erl:7: Function main/0 has no local return</font></div><div><font face="monospace">foo.erl:8: Cons will produce an improper list since its 2nd argument is </font></div><div><font face="monospace"> none()</font></div><div><font face="monospace">foo.erl:9: Record construction </font></div><div><font face="monospace"> #foo{x :: false} violates the declared type of field x ::</font></div><div><font face="monospace"> integer()</font></div></blockquote><div><br>It seems like dialyzer assumes that any cons with second argument not being a list will produce an improper list, but shouldn't it treat "none()" differently?<br><br>Is this a bug in dialyzer, or a feature whose usefulness I am unable to grasp?<br><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><p style="font-family:"Helvetica Neue",Helvetica,arial,sans-serif;font-size:9pt;line-height:1.25em;color:rgb(130,130,137);letter-spacing:0.1px;margin:0px 0px 1em;padding:0px 5px"><b>Jesper Eskilson</b><br><span style="display:inline">Senior Software Engineer</span><br><span>Kred Core</span><br><span style="font-size:9pt">+46-72-855-8421</span></p><p style="font-family:"Helvetica Neue",Helvetica,arial,sans-serif;font-size:9pt;line-height:1.25em;color:rgb(130,130,137);letter-spacing:0.1px;margin:0px 0px 1em;padding:0px 5px">Klarna Bank AB<span style="line-height:13.3333px"> (publ)</span><br>Sveavägen 46, 111 34 Stockholm<br>Tel: <a href="tel:+46812012000" style="color:rgb(130,130,137)" target="_blank">+46 8 120 120 00</a><br>Reg no: 556737-0431<br><a href="http://klarna.com/" style="color:rgb(235,111,147)" target="_blank">klarna.com</a></p><p style="font-family:"Klarna Sans",sans-serif;font-size:14px;line-height:1.4em;color:rgb(73,73,74);letter-spacing:0.1px;margin:1em 0px;padding:0px 5px"><img src="https://cdn.klarna.com/1.0/shared/image/generic/logo/sv_se/basic/logo_black.png?width=240" width="120" style="border: 0px; vertical-align: middle; max-width: 120px;"></p></div></div></div></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td align="left" valign="bottom" width="107" style="line-height:0;vertical-align:bottom;padding-right:10px;padding-top:20px;padding-bottom:20px">
<a href="https://about.me/elbrujohalcon?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=gmail_api&utm_content=thumb" style="text-decoration:none" target="_blank">
<img src="https://thumbs.about.me/thumbnail/users/e/l/b/elbrujohalcon_emailsig.jpg?_1498084031_146" alt="" width="105" height="70" style="margin: 0px; padding: 0px; display: block; border: 1px solid rgb(238, 238, 238);">
</a>
</td>
<td align="left" valign="bottom" style="line-height:1.1;vertical-align:bottom;padding-top:20px;padding-bottom:20px">
<img src="https://about.me/t/sig?u=elbrujohalcon" width="1" height="1" style="border: 0px; margin: 0px; padding: 0px; overflow: hidden;">
<div style="font-size:18px;font-weight:bold;color:rgb(51,51,51);font-family:"Proxima Nova",Helvetica,Arial,sans-serif">Brujo Benavides</div>
<a href="https://about.me/elbrujohalcon?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=gmail_api&utm_content=thumb" style="text-decoration:none;font-size:12px;color:rgb(43,130,173);font-family:"Proxima Nova",Helvetica,Arial,sans-serif" target="_blank">about.me/elbrujohalcon
</a>
</td>
</tr>
</tbody>
</table>
</div>