<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:10pt"><div class="" style="">Right, an imprecise type analysis that simply merges all receives that can be reached by the process might still give some information. You will also for correctness have to handle PID aliasing, several possible receiving processes for a send. (There are some further complicating features in the full language if you want to go that far.)</div><div class="" style=""><br class="" style=""></div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color: transparent;" class="">I'm not too optimistic about the practical power of such an analysis, because there's a lot of overapproximation going on and you will probably get a lot of spurious warnings, but
 it's "the simplest possible" analysis and so might be worth working out its strengths and weaknesses.</div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color: transparent;" class=""><br class="" style=""></div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color: transparent;" class="">I mentioned McErlang previously, here is some more information. I'm not familiar with it, but it seems they made some practical progress while the project lasted. (It doesn't look active anymore, but I'm willing to be corrected!)</div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color:
 transparent;" class=""><a href="http://babel.ls.fi.upm.es/~fred/" class="" style="">http://babel.ls.fi.upm.es/~fred/</a></div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color: transparent;" class=""><a href="https://github.com/fredlund/McErlang" class="" style="">https://github.com/fredlund/McErlang</a><br class="" style=""></div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color: transparent;" class=""><br></div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color: transparent;" class="">Best,</div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family:
 HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color: transparent;" class="">Thomas</div><div style="color: rgb(0, 0, 0); font-size: 13px; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-style: normal; background-color: transparent;" class=""><br class="" style=""></div> <div class="qtdSeparateBR"><br><br></div><div class="yahoo_quoted" style="display: block;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 10pt;" class=""> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 12pt;" class=""> <div dir="ltr" class="" style=""> <font size="2" face="Arial" class="" style=""> On Sunday, August 31, 2014 11:47 PM, Richard A. O'Keefe <ok@cs.otago.ac.nz> wrote:<br class="" style=""> </font> </div> <blockquote
 style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; margin-top: 5px; padding-left: 5px;" class="">  <br class="" style=""><br class="" style=""> <div class="" style=""><br clear="none" class="" style="">On 30/08/2014, at 12:16 AM, Thomas Lindgren wrote:<br clear="none" class="" style=""><br clear="none" class="" style="">> <br clear="none" class="" style="">> Second, Sven-Olof Nyström's old Erlang type analyzer was, at least in theory, capable of inferring types for erlang messages and processes.<br clear="none" class="" style=""><br clear="none" class="" style="">Is there a reference for that?<div class="" id="yqtfd62093" style=""><br clear="none" class="" style=""><br clear="none" class="" style="">> However, even if we remove a number of language features, an Erlang process can contain many receives connected by arbitrary control flow. Thus, I'd expect that a gen_fsm or suchlike where you essentially implement protocols could
 potentially yield a very complex type.</div><br clear="none" class="" style=""><br clear="none" class="" style="">Type systems aren't all-or-nothing.  For example, Haskell's type<br clear="none" class="" style="">system seems pretty amazing and as precise as you could wish for,<br clear="none" class="" style="">until you meet dependent type systems like the one in Idris.<br clear="none" class="" style=""><br clear="none" class="" style="">A process type need not be *precise* to be useful.  Indeed, when<br clear="none" class="" style="">you think about the fact that the type of a pid is not going to<br clear="none" class="" style="">change, while the precise set of messages it is ready to receive<br clear="none" class="" style="">*will* change from time to time, it's not clear that a precise<br clear="none" class="" style="">type would be useful at all.<br clear="none" class="" style=""><br clear="none" class="" style="">A process type that can
 tell you "you idiot, you're trying to<br clear="none" class="" style="">send a message that this process will NEVER accept under any<br clear="none" class="" style="">conditions" is enough to be useful.<div class="" id="yqtfd51419" style=""><br clear="none" class="" style=""><br clear="none" class="" style=""><br clear="none" class="" style=""><br clear="none" class="" style=""><br clear="none" class="" style=""><br clear="none" class="" style=""><br clear="none" class="" style=""><br clear="none" class="" style=""></div><br class="" style=""><br class="" style=""></div> </blockquote>  </div> </div>   </div> </div></body></html>