[erlang-questions] Dialyzer warning: variable can never match since previous clauses completely covered the type

David Sveningsson <>
Wed Mar 25 16:31:06 CET 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Magnus Henoch wrote:
> David Sveningsson <> writes:
> 
>> -spec foo() -> ok | {error, reason}.
> 
> This is not what you meant to write.  You declare that foo returns
> either the atom 'ok', or a tuple of two atoms, 'error' and 'reason'.

Right, I meant {error, atom()}. I did however have a similar issue in my
code.

>> foo() ->
>> 	case random:uniform(10) of
>> 		N when N > 5 -> ok;
>> 		_ -> {error, foobar}
>> 	end.
> 
> Dialyzer believes your spec, and finds that your code can not possibly
> return {error, reason}.  Therefore, the only remaining possibility is
> 'ok'.
> 
> You could write the spec as {error, foobar}, {error, atom()} or {error,
> Reason::atom()}.

Lets say that foo looks like this:

- -spec foo() -> ok | {error, atom()}.
foo() ->
	ok.

I get the same error. It is true that the function will only return ok,
but I would like to reserve that it may return {error, atom()} in the
future. It that possible?

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.11 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAknKTjoACgkQ6pa1H/H5pqWrKwCglz8a5i7qEG7DvLUq+fT1ThP7
mroAn3fgvCiIHilB6WJqulrmQaqCkGZD
=dHTW
-----END PGP SIGNATURE-----



More information about the erlang-questions mailing list