<!DOCTYPE html><html><head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  
<style type="text/css">body { font-family:'DejaVu Sans Mono'; font-size:12px}</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">On Wed, 30 Oct 2013 10:57:43 -0400, Bj√∂rn-Egil Dahlberg <egil@erlang.org> wrote:<br><br><blockquote style="margin: 0 0 0.80ex; border-left: #0000FF 2px solid; padding-left: 1ex">
    <div class="moz-cite-prefix">However, I think we can view maps as functions and the pairs as
    function clauses. It should be the same problem space, i.e. range
    and domains, product and unions.<br></div>
    <br>
    so,<br>
    <br>
    -spec wat() -> #{ binary() => integer()}.<br>
    <br>
    would exhibit the same problem/solution as,<br>
    <br>
    -spec foo(binary()) -> integer().<br>
    <br>
    foo(B) when is_binary(B) -> binary_to_integer(B).</blockquote><div><br></div><div>That works for heterogeneous maps (i.e. supporting selection).  But for the example you give (a homogeneous map, supporting enumeration) this fails, as that signature requires that the function be defined for *all* binaries.  Clearly this is impossible!</div><div><br></div><div>-spec foo(Key1) -> Value1Type.</div><div>-spec foo(Key2) -> Value2Type.</div><div><br></div><div>works for heterogeneous maps, but not homogeneous maps.  For a homogeneous map, the signature you need is:</div><div><br></div><div>-spec foo(KeyType) -> {ok, ValueType} | none.</div><div><br></div><div>because "Key" here is necessarily a full type rather than a single value or two, and the map, being finite, cannot contain a value for every possible key.</div><div><br></div><div><br></div><blockquote style="margin: 0 0 0.80ex; border-left: #0000FF 2px solid; padding-left: 1ex">I've looked at your other mail but I don't have time to get into the
    details right now. <br>
    Thank you for feedback! It is much appreciated and I will look into
    it when the time arrives!</blockquote><div><br></div><div>Thanks for listening.  I come from the OCaml world which *almost* has heterogeneous maps done right (its object types); AFAIK no other language does (beside SQL), hence why I am so engaged :)</div></body></html>