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

Dmitry Belyaev <>
Thu Apr 22 16:32:18 CEST 2010


Yes, I use R1303.
But the desired warning is about line 11: check_atom(AtomBad) would fail 
because AtomBad type is 'bad'. Or at least ('good'|'bad').

Kostis Sagonas wrote:
>
> Dmitry Belyaev wrote:
>> I thought type specs are made for external typechecks. Ok. Now I have 
>> this code:
>> -module(test).
>>
>> -export([start/0]).
>>
>> -spec start() -> ok.
>> start() ->
>>    AtomBad = get_atom(1),
>>    AtomGood = get_atom(2),
>>    check_atom(AtomBad),
>>    case check_atom(AtomGood) of
>>        ok -> ok;
>>        error -> error
>>    end.
>>
>> -spec get_atom(any()) -> good | bad.
>> get_atom(1) ->
>>    bad;
>> get_atom(_) ->
>>    good.
>>
>> -spec check_atom(good | nice) -> ok | error.
>> check_atom(Atom) ->
>>    ok.
>>
>> It doesn't warn me about check_atom(AtomBad).
>
> It does; see below.  You are using an older Erlang/OTP.
> Upgrade to R13B04.
>
> Kostis
>
> test.erl:12: The pattern 'error' can never match the type 'ok'
> test.erl:21: The specification for test:check_atom/1 states that the 
> function might also return 'error' but the inferred return is 'ok'
>
> ________________________________________________________________
> 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