Dialyzer and throw/catch

Gordon Guthrie <>
Sat Dec 4 21:53:51 CET 2010


Sorry the dialyzer messages should have read:

muin.erl:88: The pattern {'error', Err = {'aborted', _}} can never match the
type {'ok',_}
muin.erl:90: The pattern {'error', ErrVal} can never match the type {'ok',_}

The other ones are from elsewhere in the module

G

On 4 December 2010 20:52, Gordon Guthrie <> wrote:

> Folks
>
> I am getting a dialyzer error that doesn't seem write.
>
> Here is the code:
>
>             case Value of
>                 R when ?is_cellref(R) ->
>                     case muin_util:attempt(?MODULE, fetch, [R]) of
>                         {ok,    blank}              -> 0;
>                         {error, {aborted, _} = Err} -> exit(Err);
>                         {ok,    Other}              -> Other;
>                         {error, ErrVal}             -> ErrVal
>                     end;
>
> It call the function muin_util:attempt/3 which looks like:
>
> attempt(Mod, F, Args) ->
>     try apply(Mod, F, Args) of
>         Val -> {ok, Val}
>     catch
>         Error:Reason when Error =:= error orelse Error =:= throw ->
>             error_logger:error_msg({Error, Reason,
> erlang:get_stacktrace()}),
>             {error, Reason}
>     end.
>
> Dialyzer gives the following warning:
>
> muin.erl:88: The pattern {'error', Err = {'aborted', _}} can never match
> the type {'ok',_}
> muin.erl:90: The pattern {'error', ErrVal} can never match the type
> {'ok',_}
> muin.erl:134: The pattern {'error', Err = {'errval', _}} can never match
> the type {'ok',_}
> muin.erl:135: The pattern {'error', Err = {'aborted', _}} can never match
> the type {'ok',_}
> muin.erl:136: The pattern {'error', _E} can never match the type {'ok',_}
>
> The function attempt/3 can return both the {'error', ...} patterns it
> objects to, from the catch...
>
> Am I missing something?
>
> Gordon
>
> --
> Gordon Guthrie
> CEO hypernumbers
>
> http://hypernumbers.com
> t: hypernumbers
> +44 7776 251669
>



-- 
Gordon Guthrie
CEO hypernumbers

http://hypernumbers.com
t: hypernumbers
+44 7776 251669


More information about the erlang-questions mailing list