[erlang-questions] Maps branch and disclaimers

Chris King colanderman@REDACTED
Wed Oct 30 16:13:51 CET 2013


On Wed, 30 Oct 2013 10:57:43 -0400, Björn-Egil Dahlberg <egil@REDACTED>  
wrote:

> 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.
>
> so,
>
> -spec wat() -> #{ binary() => integer()}.
>
> would exhibit the same problem/solution as,
>
> -spec foo(binary()) -> integer().
>
> foo(B) when is_binary(B) -> binary_to_integer(B).

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!

-spec foo(Key1) -> Value1Type.
-spec foo(Key2) -> Value2Type.

works for heterogeneous maps, but not homogeneous maps.  For a homogeneous  
map, the signature you need is:

-spec foo(KeyType) -> {ok, ValueType} | none.

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.


> I've looked at your other mail but I don't have time to get into the  
> details right now.Thank you for feedback! It is much appreciated and I  
> will look into it when the time arrives!

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 :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20131030/a2708461/attachment.htm>


More information about the erlang-questions mailing list