[erlang-questions] Wrong advertised spec of lists:append/2

ノートン ジョーセフ ウェイ ン norton@REDACTED
Fri Mar 29 02:49:40 CET 2013


Interesting.

I would have expected the spec written in the lists module to have triggered a warning message.

By adding any one of these specs, dialyzer does produce the desired warning message.  

-module(foo).

-export([bar/2, baz/0]).

%%-spec bar(list(), list()) -> list().
%%-spec bar(list(term()), list(term())) -> list(term()).
%%-spec bar([term()], [term()]) -> [term()].
bar(A, B) ->
	lists:append(A, B).

baz() ->
	bar([], a).


 dialyzer --plt ~/.dialyzer_plt.R16B ebin/foo.beam 
  Checking whether the PLT ~/.dialyzer_plt.R16B is up-to-date... yes
  Proceeding with analysis...
foo.erl:10: Function baz/0 has no local return
foo.erl:11: The call foo:bar([],'a') breaks the contract ([term()],[term()]) -> [term()]
 done in 0m6.70s
done (warnings were emitted)



On Mar 29, 2013, at 24:04 , Pierre Fenoll <pierrefenoll@REDACTED> wrote:

> Dialyzer says it passed successfully.
> 
> On 28 March 2013 15:38, Joseph Wayne Norton <norton@REDACTED> wrote:
> 
> Pierre -
> 
> Just in case ... have you tried running Dialyzer on your program?  If so, what does Dialyzer report?
> 
> regards,
> 
> Joe N.
> 
> On Mar 28, 2013, at 11:12 PM, Pierre Fenoll <pierrefenoll@REDACTED> wrote:
> 
> > > It's not a contradiction, as kostis noted specs are not complete
> > > enumerations of all possible argument types.
> >
> > Well, lists:append/2 asks for a list() as a second argument. Shouldn't
> > it badarg when I give it 'a', as in lists:append([], a) ?
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20130329/56c27fc4/attachment.htm>


More information about the erlang-questions mailing list