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

Jesper Eskilson jesper.eskilson@REDACTED
Fri Feb 14 13:44:38 CET 2020


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?

-- 

*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/bd0c5623/attachment.htm>


More information about the erlang-questions mailing list