[erlang-questions] [Q] dialyzer message: The pattern X can never match the type Y

Per Gustafsson <>
Wed May 28 21:42:12 CEST 2008


Ladislav Lenart wrote:
> Hello,
>
> first I'd like to say that dialyzer is a wonderful and
> easy-to-use tool. It has already found several bugs for
> me :-)
>
> But I don't understand what dialyzer is trying to tell
> me with a warning like:
>
>    The pattern X can never match the type Y.
>
> The actual code seems fine to me. It is similar to:
>
> %%%%%%%%%%%%%%%%
> -module(mod).
>
> -export(f/1).
>
> f(Arg) when Arg == foo; Arg == bar; Arg == baz ->
>      case Arg of
>          foo -> x();
>          _ -> y()
>      end.
> %%%%%%%%%%%%%%%%
>
> However, dialyzer does not report a warning like:
>
>    The pattern 'foo' can never match the type 'baz'
>
> for the module above.
>
> So I'd like to know what does the warning mean.
>
> Thanks in advance,
>
> Ladislav Lenart
>
>   

The most likely reason you get a warning like that, which is hard to 
understand is that you have something like this:

-module(mod).

-export([g/0]).

g() ->
  f(bar),...,f(baz).

f(Arg) when Arg == foo; Arg == bar; Arg == baz ->
     case Arg of
         foo -> x();
         _ -> y()
     end.

That is you never actually call f/1 with foo and f/1 is not exported.

Per
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
>   




More information about the erlang-questions mailing list