[erlang-questions] Dialyzer and erlang:error/1

Oscar Hellström oscar@REDACTED
Wed Jul 8 16:21:10 CEST 2009


Hi Tobias,

Thank you very much, this works well :)

Tobias Lindahl wrote:
>
>
> Oscar Hellström wrote:
>> Hi All,
>>
>> I'm trying to express that a valid list of options will return ok while
>> any invalid option would eventually throw an exception, but Dialyzer and
>> I don't get along.
>>
>> Dialyzer says:
>> foo.erl:14: The call foo:verify(Options::any(),[any(),...]) will never
>> return since it differs in argument position 2 from the success typing
>> arguments: (['bar' | 'foo'],[])
>>
>> This is entirely true, but it's not an error, it's what I want! I guess
>> I'm failing to express what I want here, so could anybody help me?
>>
> I see what you are trying to do, but unfortunately it does not work
> this way. The no_return() will disappear when you make the union.
>
> What you need to do, although I admit that it is a bit constructed, is
> to break out the clause that throws the exception to a separate
> function. In this way the no_return() allows you to accept the
> exception clause.
>
> (Code below. Should work. Haven't tried it)
>
> Best regards,
>
> Tobias
>
>
> -module(foo).
> -export([verify/1]).
>
> -spec verify([atom()]) -> ok.
>
> verify(Options) ->
>     verify(Options, []).
>
> -spec verify([atom()], [atom()]) -> ok.
>
> verify([foo | Options], Errors) ->
>     verify(Options, Errors);
> verify([bar | Options], Errors) ->
>     verify(Options, Errors);
> verify([Option | Options], Errors) ->
>     verify(Options, [Option | Errors]);
> verify([], []) ->
>     ok;
> verify([], Errors) ->
>     bad_options(Errors).
>
> -spec bad_options([atom()]) -> no_return().
>
> bad_options(Errors) ->
>     erlang:error({bad_options, Errors}).
>
>
>
>> Best regards
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>> ________________________________________________________________
>> erlang-questions mailing list. See http://www.erlang.org/faq.html
>> erlang-questions (at) erlang.org


-- 
Oscar Hellström, oscar@REDACTED
Office: +44 20 7655 0337
Mobile: +44 798 45 44 773
Erlang Training and Consulting Ltd
http://www.erlang-consulting.com/



More information about the erlang-questions mailing list