[erlang-patches] Add a proplist() type

Richard Carlsson carlsson.richard@REDACTED
Mon May 23 17:36:53 CEST 2011


On 2011-05-23 17:00, Ryan Zezeski wrote:
> I found it odd the there is no canonical proplist() type defined so this
> is my attempt at adding one.
>
> git fetch git://github.com/rzezeski/otp.git
> <http://github.com/rzezeski/otp.git> add_proplist_type

Good idea. It fixes a few overspecified local definitions which state 
that a proplist has the type [{atom(),term()}] while the proplists 
module define it to be [property()] where property() = atom() | tuple().

(If some of those local definitions really mean that only {atom(), 
term()} are allowed, and they don't actually use the proplists module, 
they should preferably change the name of their local type instead.)

A couple of examples should make it clear: to the proplists module, all 
of these elements are valid properties:

     foo                  % interpreted as equal to {foo, true}
     {bar, 42}
     {<<"baz">>, 1234}    % the key can be any term, not just an atom
     {foo, 1, 2, 3}       % the tuple may have more than two elements
     {foo}                % even a tuple with only a key is allowed

In fact, the functions in the proplists module generally allow other 
terms to be present in the list, so they actually accept [any()] as 
input, but elements that are not of the property() type are ignored.
Specifying that they require [property()] instead might concievably make 
some existing code be considered as broken by Dialyzer, but it could be 
worth it in order to get better checking in normal cases. I'll leave 
this decision to Kostis and the OTP team.

     /Richard



More information about the erlang-patches mailing list