Proposed change to libraries

Bjorn Gustavsson bjorn@REDACTED
Tue Feb 8 11:54:15 CET 2005

Kostis Sagonas <kostis@REDACTED> writes:
> However, apparently I am missing the obvious, because I do not see
> how this is easier (though I see that it is more elegant) to
> implement than what we were essentially discussing yesterday...

It is essentially the same, just packaged in a much more elegant way.

> The key question is: does "is_applicable({M,F}, 1)" always check that
> the M:F/1 is a valid fun (and succeeds accordingly) or not?

No. is_applicable/2 cannot still check whether M:F/A will be possible to
apply or not. is_applicable/2 would have to assume that any tuple containing
two atom elements is a valid tuple fun.

But as I see two advantages using is_applicable/2:

1) When/if we'll finally be able to eliminate tuple funs, we can change 
   is_applicable/2 to no longer accept tuple funs (as opposed to changing
   Erlang code in many places).

2) When Dialyzer sees is_applicable/2, it is a stronger type indication
   than just 'foo({M,F}) when is_atom(M), is_atom(F)' which need not be
   a tuple fun. At least it should be enough indication for Dialyzer to
   assume that F has the same type in both clauses of lists:map/2. That
   should allow Dialyzer to generate more warnings than it can today.

If it would be of help to Dialyzer, we might be able to add is_applicable/2
even to R10B-4 (and start using it in library modules such as lists).

On the other hand, I can give no definite time plan for when we'll
be able to forbid tuple funs. Sorry.

Björn Gustavsson, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list