Dialyzer "no local return" warning for anonymous functions

Bernard Duggan bernie@REDACTED
Wed Dec 15 06:35:56 CET 2010


Hi all,

We have a bit of code that looks something like this:

validate(A, B) ->
     try
         mnesia:transaction(fun() ->
             some_test_db_operations(A, B),
             mnesia:abort(all_valid)
         end),
     catch
         exit:{aborted, all_valid} -> ok;
         exit:{aborted, Error} -> {error, Error}
     end.

The purpose is to "try out" some mnesia operations on un-validated data 
to ensure that they'll all work.  It's kind of a neat trick (though no 
doubt falling fairly far from "best practise" in terms of use of 
exceptions), but it annoys dialyzer in a way that I can't figure out how 
to avoid.

Dialyzer (as of R14B01, at least) quite correctly reports that the 
anonymous function in the transaction has no local return.  For normal 
functions, I'd work around this by simply giving it a -spec with 
no_return() as the return type, and everyone is happy.  As far as I 
know, though, there's no way to -spec an anonymous function, nor is 
there any obvious way to make that particular function not anonymous.

Any suggestions are welcome :)

Cheers,

Bernard


More information about the erlang-questions mailing list