gen_statem:start_monitor dialyzer warning

Kostis Sagonas kostis@REDACTED
Sun Jan 24 14:31:54 CET 2021

On 1/24/21 2:14 PM, Matt Kowalczyk wrote:
> Having a hard time understanding why the following sample code generates 
> a dialyzer warning,

Either because somebody added wrong specs to 'gen_statem' or forgot to 
update the specs of 'gen'.

===== gen_statem has these types and specs =====

-type start_mon_ret() ::
         {'ok', {pid(),reference()}}
       | 'ignore'
       | {'error', term()}.

-spec start_monitor(
	Module :: module(), Args :: term(), Opts :: [start_opt()]) ->
start_monitor(Module, Args, Opts) ->
     gen:start(?MODULE, monitor, Module, Args, Opts).

===== gen:start/5's return type is: ======

-type start_ret()  :: {'ok', pid()} | 'ignore' | {'error', term()}.

Their intersection is: 'ignore' | {'error', term()}.

Dialyzer is never wrong (C), but wrong specs can cause confusion.


More information about the erlang-questions mailing list