[erlang-questions] dialyzer: user-defined types just synonyms?

Dmitry Belyaev <>
Thu Apr 22 15:57:09 CEST 2010


Cause I may extend this function in the future. Or got this version 
after refactoring and don't want to change code that uses it.


Kostis Sagonas wrote:
>
> Dmitry Belyaev wrote:
>> And one more question. I have a code:
>> -module(test).
>>
>> -export([start/0]).
>>
>> -spec start() -> ok.
>> start() ->
>>    %%check_atom(bad),
>>    case check_atom(good) of
>>        ok -> ok;
>>        error -> error
>>    end.
>>
>> -spec check_atom(good | nice) -> ok | error.
>> check_atom(Atom) ->
>>    ok.
>>
>> Dialyzer shows:
>> test.erl:10: The pattern 'error' can never match the type 'ok'
>> I'd like it to pay more attention to -spec than to function's body so 
>> I wouldn't get this message. Is it possible?
>
> You've defined two functions in your example, one that returns either 
> 'ok' or 'error' and you give it a spec that says it only returns 'ok' 
> and one that clearly returns 'ok' only and your spec claims it returns 
> 'error' also.  Why on earth you would you want to do that in your 
> program?  If you want obfuscated code, write in C instead.
>
> Dialyzer has detected that you are clearly an evil programmer :-)
> Why should it be nice to you?
>
> Kostis
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:
>
>



More information about the erlang-questions mailing list