[erlang-questions] dialyzer underspecs warning

Kostis Sagonas <>
Fri Aug 8 16:13:08 CEST 2014


On 08/08/2014 01:19 PM, Krzesimir Sarnecki wrote:
> I'm learning how to use -specs + dialyzer and I encountered a problem.
> I hope you could help me deal with it.
>
> This is my test function:
>
> test(Array, N, Value) ->
>      array:set(N, Value, Array).
>
> And this ia a spec I wrote for it:
>
> -spec test(array:array(T), non_neg_integer(), T) -> array:array(T).
>
> When I run dialyzer with -Wunderspecs flag it gives me a warning:
>
> Type specification test:test(array:array(T),non_neg_integer(),T)
> -> array:array(T) is a supertype of the success typing: (very long
> typing)
>
> To my surprise when I change a spec to:
>
> -spec test(array:array(T), non_neg_integer(), _) -> array:array(T).
>
> Dialyzer doesn't give me the warning anymore.
>
> Am I missing something or dialyzer is telling me that T is a supertype
> of any()?

You are not missing anything.  I looks like this is a bug that should be 
fixed. (*)

Thanks for reporting the issue!

Kostis

(*) Most likely this has to do with the recent changes that allow 
polymorphic opaque data types to work considerably better than they used 
to, but obviously not perfectly yet.




More information about the erlang-questions mailing list