<html><head></head><body><div class="ydp52bb033fyahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:10px;"><div><div>The problem is that I have already a internal function call that (any())  case</div><div><br></div><div class="ydp52bb033fsignature">Best Regards
 W.W.(KingWang)</div></div>
        <div><br></div><div><br></div>
        
        </div><div id="yahoo_quoted_6933346349" class="yahoo_quoted">
            <div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
                
                <div>
                    On Saturday, April 27, 2019, 10:52:11 PM GMT+2, Hugo Mills <hugo@carfax.org.uk> wrote:
                </div>
                <div><br></div>
                <div><br></div>
                <div>On Sat, Apr 27, 2019 at 08:15:10PM +0000, WW wrote:<br clear="none">> Thank you for your answer Kostis.<br clear="none">> But will erlang crash if any other internal function call this internal function with an argument of integer() or someother term()?<br clear="none"><br clear="none">   The point here is that dialyzer can *prove* that the function will<br clear="none">not be called with anything other than the first two cases. It<br clear="none">therefore tells you that the third catch-all case is impossible. You<br clear="none">can safely remove that third clause.<br clear="none"><br clear="none">   If at some point in the future you write some code which could call<br clear="none">the function with some other input, then dialyzer will tell you about<br clear="none">that, too.<br clear="none"><br clear="none">   If you want a quiet dialyzer, the solution here is to remove the<br clear="none">third (catch-all) clause, until you have some code which actually<br clear="none">needs it.<br clear="none"><br clear="none">   Hugo.<div class="yqt4660806838" id="yqtfd94781"><br clear="none"><br clear="none">> -------------------------------------------------------------------------------------------------------------------------------------------------------------- ###=====================================================================###<br clear="none">>  -spec convert_result_and_exit(any()) -> no_return().<br clear="none">>  %%% <br clear="none">>  ###=====================================================================###<br clear="none">> convert_result_and_exit({error, ErrReason}) when is_binary(ErrReason)-> <br clear="none">> exit({error, ErrReason}); convert_result_and_exit(no_permission)-> exit(no_permission).<br clear="none">> <br clear="none">> test() ->    convert_result_and_exit ( [1,2,3] ).     ( It is a use case , why "so they cannot be with any() as argument" ?  Where in the erlang doc defined that?)<br clear="none">> <br clear="none">> In this case, test() will crash owing to missing the convert_result_and_exit(_E) -> exit({error, <<"Unknown reason">>}).   I do not want it crash, I need a quiet exit (catch it afterwards)instead, will that be possible ?----------------------------------------------------------------------------------------------------------------------------------------------------------------<br clear="none">> The question is : Why dialyzer could not detect the internal non-exported spec ?  Or Erlang module interal function should not have any spec at all , because dialyzer doesn't care?<br clear="none">> Is it  the limitation of dialyzer or  wrong in the design? What is the best solution, in my situation?<br clear="none">> BR//Wei Wang<br clear="none">> Best Regards W.W.(KingWang) <br clear="none">> <br clear="none">>     On Saturday, April 27, 2019, 4:52:29 PM GMT+2, Kostis Sagonas <<a shape="rect" ymailto="mailto:kostis@cs.ntua.gr" href="mailto:kostis@cs.ntua.gr">kostis@cs.ntua.gr</a>> wrote:  <br clear="none">>  <br clear="none">>  On 4/27/19 12:43 PM, WW wrote:<br clear="none">> > But according to spec   the input of the function can be any()! It is <br clear="none">> > obvious the _E  should be considered, otherwise erlang will crash.<br clear="none">> > <br clear="none">> > Am I wrong?<br clear="none">> <br clear="none">> Yes, you are.<br clear="none">> <br clear="none">> The function is not exported; all calls to it are from within the module <br clear="none">> (i.e., known to dialyzer), so they cannot be with any() as argument; <br clear="none">> they can only be with the term types that dialyzer has inferred.<br clear="none">> <br clear="none">> Kostis</div><br clear="none">>   <br clear="none"><br clear="none">> _______________________________________________<br clear="none">> erlang-questions mailing list<br clear="none">> <a shape="rect" ymailto="mailto:erlang-questions@erlang.org" href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br clear="none">> <a shape="rect" href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br clear="none"><br clear="none"><br clear="none">-- <br clear="none">Hugo Mills             | You can get more with a kind word and a two-by-four<br clear="none"><a shape="rect" ymailto="mailto:hugo@..." href="mailto:hugo@...">hugo@...</a> carfax.org.uk | than you can with just a kind word.<br clear="none"><a shape="rect" href="http://carfax.org.uk/ " target="_blank">http://carfax.org.uk/ </a> |<br clear="none">PGP: E2AB1DE4          |                                Marcus Cole, Babylon 5</div>
            </div>
        </div></body></html>