[erlang-questions] dict() type issue

Michael Truog <>
Fri Jan 3 18:04:10 CET 2014


Never mind about this.  I can understand why an is_dict/1 guard will never happen (dict is not a real type).  The only good solution (to this type checking need in a generic API, with dict) in Erlang is to wrap all your data structure usage in a tagged tuple like {dict, dict()} despite that being odd and annoying.  With the is_map/1 guard, maps can be checked as a real type, so it will be easier to use in a generic interface.

On 01/02/2014 02:56 PM, Michael Truog wrote:
> Hi!
>
> The dict() type being defined as opaque prevents it from being checked with other dictionary implementations that rely on tuples.  If you do "is_tuple(D), element(1, D) =:= dict" dialyzer will complain once it realizes that D is a dict(), despite the fact it is a tuple underneath the opaque type.  To help with the migration to maps, a new function is_dict/1 could help check the type during runtime, in a way that doesn't anger dialyzer.  Ideally, is_dict/1 would be a guard function, but I assume that is problematic unless it was added to the erlang module.  Is there any reason we wouldn't want an is_dict/1 function?
>
> Thanks,
> Michael




More information about the erlang-questions mailing list