Dialyzer: Cons will produce an improper list since its 2nd argument is none()

Dmitry Belyaev be.dmitry@REDACTED
Fri Feb 14 14:56:46 CET 2020

When a tool does something incorrect, and I think everybody agree that first and second warnings are incorrect, those are called bugs, not features.

And when something incorrect is purposefully sneaked in, then one may ask a question what else undesirable may be purposefully added. It could be a routine sending private code to professional human code review to ensure the high quality and absence of bugs.

On 14 February 2020 11:53:23 pm AEDT, Kostis Sagonas <kostis@REDACTED> wrote:
>On 2/14/20 1:44 PM, Jesper Eskilson wrote:
>> Hi,
>> When dialyzer analyzes this program:
>>     -module(foo).
>>     -export([main/0]).
>>     -record(foo, {x :: integer()}).
>>     main() ->
>>        [ #foo{x = 0},
>>          #foo{x = false} ].
>> it says:
>>     foo.erl:7: Function main/0 has no local return
>>     foo.erl:8: Cons will produce an improper list since its 2nd
>argument is
>>                none()
>>     foo.erl:9: Record construction
>>                #foo{x :: false} violates the declared type of field x
>>                integer()
>> 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?
>> Is this a bug in dialyzer, or a feature whose usefulness I am unable
>> grasp?
>It's a dialyzer feature, which we have purposedly sneaked into the tool
>to discover all users who choose to stop reading all warnings that the 
>tool spits out and are not experienced enough to realize that once they
>fix the real culprit, which may not be the first warning that that the 
>tool produces, the other warnings will also disappear.

Kind regards,
Dmitry Belyaev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20200215/0166c8f1/attachment.htm>

More information about the erlang-questions mailing list