No, the problem lies in the spec of rpc:yield/1<div><br></div><div><div>-spec yield(Key) -> {value, Val} | timeout when</div><div>      Key :: key(),</div><div>      Val :: (Res :: term()) | {badrpc, Reason :: term()}.</div><div><br></div><div>yield(Key) when is_pid(Key) -></div><div>    {value,R} = do_yield(Key, infinity),</div><div>    R.</div></div><div><br></div><div>The return value is simply "Val" and not the union "{value, Val} | timeout". I guess somebody in the OTP team can fix that.</div><div><br></div><div>Dialyzer has a few tricks up its sleeve for handling incoming messages as the ones that appear in do_yield, but these are still experimental!</div><div><br></div><div>Stavros</div>