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

Jesper Eskilson jesper.eskilson@REDACTED
Fri Feb 14 13:58:16 CET 2020


Awesome reply! Thanks,

On Fri, Feb 14, 2020 at 1:53 PM 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 to
> > 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.
>
> Cheers,
> Kostis
>


-- 

*Jesper Eskilson*
Senior Software Engineer
Kred Core
+46-72-855-8421

Klarna Bank AB (publ)
Sveavägen 46, 111 34 Stockholm
Tel: +46 8 120 120 00 <+46812012000>
Reg no: 556737-0431
klarna.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20200214/cee5ec6d/attachment.htm>


More information about the erlang-questions mailing list