<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>Thank you for the quick reply Stavros!</p>
    <p> You mean that dialyzer inference is stronger than the defined
      typespec?</p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 01/17/2017 04:08 PM, Stavros Aronis
      wrote:<br>
    </div>
    <blockquote
cite="mid:CABOX0Z_+mXRZ6RWQ0ZeUaU1bQ-MhkZvTnfZZ-_w0pxEqeEQfyg@mail.gmail.com"
      type="cite">
      <div dir="ltr">Hi Bastien,
        <div><br>
        </div>
        <div>can it be the case that "is_relation/2" is only used
          "locally" (i.e. within the module itself) and all such calls
          to "is_relation/2" will return 'false'?</div>
        <div><br>
        </div>
        <div>This looks like a case where dialyzer has inferred such a
          thing and thus complains about the pattern that can't match.</div>
        <div><br>
        </div>
        <div>Regards,</div>
        <div><br>
        </div>
        <div>Stavros</div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Tue, Jan 17, 2017 at 3:47 PM,
          Bastien Chamagne <span dir="ltr"><<a
              moz-do-not-send="true" href="mailto:bchamagne@idmog.com"
              target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:bchamagne@idmog.com">bchamagne@idmog.com</a></a>></span> wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000"> Hello, <br>
              <div class="m_-5358249171057988792moz-forward-container">
                <p> I'm trying to use dialyzer and I don't know how to
                  type functions that are written in "happy path" (may
                  crash).<br>
                  Here's a sample function that may or may not crash
                  depending if Field correspond to a relation field on
                  given Model:<br>
                  <tt><br>
                  </tt><tt>    -spec is_relation(field(), model()) ->
                    {true, relation_type()} | false.</tt><tt><br>
                  </tt><tt><br>
                  </tt><tt>    %% @doc Sets a relation on the given
                    model.</tt><tt><br>
                  </tt><tt>    -spec set_relation(field(), model(),
                    model()) -> model() | no_return().</tt><tt><br>
                  </tt><tt>    set_relation(Field, RelatedModel, Model)
                    -></tt><tt><br>
                  </tt><tt>        % On next line, I'm OK that this
                    function crashes if I try to set a relation on a
                    non-relation field </tt><tt><br>
                  </tt><tt>        {true, RelationType} =
                    is_relation(Field, Model),</tt><tt><br>
                  </tt><tt>        set_relation(Field, RelatedModel,
                    Model, RelationType).</tt><br>
                  <br>
                  Here's what dialyzer says:</p>
                <p><tt>    model.erl:180: Function set_relation/3 has no
                    local return</tt><tt><br>
                  </tt><tt>    model.erl:181: The pattern {'true',
                    RelationType} can never match the type 'false'</tt><br>
                  <br>
                  Is there anything that I can do to inform dialyzer
                  that this is a OK behaviour for me?</p>
                <p>Cheers!<br>
                  <br>
                  <i>ps: I'm using erlang 17 if that matters.</i><br>
                  <i>ps: Sorry if it's a duplicate, I can't find the
                    previous message on the archive.</i><br>
                  <br>
                </p>
              </div>
            </div>
            <br>
            ______________________________<wbr>_________________<br>
            erlang-questions mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
            <a moz-do-not-send="true"
              href="http://erlang.org/mailman/listinfo/erlang-questions"
              rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
            <br>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </body>
</html>