<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Apr 19, 2016 at 4:08 PM Kostis Sagonas <<a href="mailto:kostis@cs.ntua.gr">kostis@cs.ntua.gr</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 04/19/2016 08:50 AM, PhayTsukiming wrote:<br>
><br>
> Then apply dialyzer to this module and dialyzer warns:<br>
><br>
> t.erl:8: Invalid type specification for function t:bar/1. The success<br>
> typing is ([integer()]) -> [integer()]<br>
><br>
> But if I change the specification of bar to:<br>
><br>
> -spec bar([atom()])->[integer()].<br>
><br>
> dialyzer will show no warnings. My intention is to make sure the<br>
> argument of bar is the same type of list as the argument of foo.<br>
<br>
OK, but then why don't you put the same spec there?  Is there any<br>
problem in this case?<br></blockquote><div><br></div><div>Sorry, I forgot to mention that I was experimenting with my understanding of dialyzer. In the beginning, I thought type specification in erlang works as just the same as in other static type language.  </div><div><br></div><div>So I used <span style="line-height:1.5">-spec bar(atom())->[integer()] then dialyzer complained. This worked as expected. </span></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">But when I used </span><span style="line-height:1.5">-spec bar([atom()])->[integer()], then dialyzer didn't say a word and in static type languages, similar specifications would cause the compiler to generate errors. </span></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
> Is this normal? Do I miss or misunderstand something about success<br>
> typing or dialyzer?<br>
<br>
Yes, you do.  All that dialyzer ever promised is that when it spits a<br>
warning then this warning is correct.  (This is the "Dialyzer is never<br>
wrong" slogan.)<br>
<br>
On the other hand, it never promised to produce warnings in all cases<br>
you may expect it to do so.<br>
<br>
Kostis<br>
</blockquote></div></div>