dialyzer and ets:select

Samuel Rivas <>
Wed Mar 22 13:46:25 CET 2006


Hello,

  Seems that dialyzer makes a wrong typing for ets:select. I wrote a
little module to check it:


-module(ets_fail).
-export([foo/1]).

foo(Table) ->
    Tuples = ets:select(Table, [{{'_', '$1', '$2'}, [], ['$$']}]),
    [list_to_tuple(Tuple) || Tuple <- Tuples].


If you dilalyze it you'll get next complain:

  ets_fail,'-foo/1-letrec-lc$^0-',1}: Call to function
  {erlang,list_to_tuple,1} with signature (([any()]) -> tuple()) will fail
  since the arguments are of type (tuple())!

Which is not true:

2> Table = ets:new(table, [set,{keypos,1}]).
17
3> ets:insert(Table, {foo, bar, baz}).                  
true
4> ets:select(Table, [{{'_', '$1', '$2'}, [], ['$$']}]).
[[bar,baz]]
5> ets_fail:foo(Table).
[{bar,baz}]

-- 
	Samuel



More information about the erlang-questions mailing list