Looks great. Glancing at the code, erlson:from_proplist if your proplist key is not an atom will not work, or will it? It would be nice if it automatically converted from lists and binaries.<br><br><br>Sergej<br><br><div class="gmail_quote">
On Mon, Aug 29, 2011 at 6:50 AM, Anton Lavrik <span dir="ltr"><<a href="mailto:alavrik@piqi.org">alavrik@piqi.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi list,<br>
<br>
It is my pleasure to announce Erlson - a proof of concept<br>
implementation of dynamic dictionary data type. It can be best<br>
described by examples:<br>
<br>
    X = #{},  % create an empty dictionary<br>
<br>
    D = #{foo = 1, bar = "abc", fum},  % associate fields 'foo' with<br>
1, 'bar' with "abc" and 'fum' with 'true'<br>
<br>
    1 = D.foo,  % access dictionary element<br>
<br>
    D1 = D#{baz = #{fum = #{i = 0}}},    % add nested dictionaries to<br>
dictionary D<br>
<br>
    0 = D1.baz.fum.i,     % access elements of the nested dictionary<br>
<br>
    D2 = D1#{baz.fum.i = 100, baz.fum.j = "new nested value"}. %<br>
modify elements of the nested dictionary<br>
    ...<br>
<br>
    erlson:to_json(D2).   % convert Erlson dictionary to JSON iolist()<br>
<br>
    D = erlson:from_json(Json).  % create Erlson dictionary from JSON iolist()<br>
    ...<br>
<br>
    D = erlson:from_proplist(L).     % create Erlson dictionary from a proplist<br>
<br>
    D = erlson:from_nested_proplist(L).  % create nested Erlson<br>
dictionary from a nested proplist<br>
<br>
<br>
Erlson implementation is fully working and includes syntax support,<br>
runtime library and rebar packaging. The source code is available on<br>
GitHub: <a href="https://github.com/alavrik/erlson" target="_blank">https://github.com/alavrik/erlson</a><br>
<br>
Internally, Erlson dictionaries are represented as orddicts, i.e.<br>
ordered lists of {atom(), any()} pairs. This way, they can be easily<br>
printed, manipulated and  explored using conventional methods. For<br>
example, using the standard "orddict" and "proplists" libraries. It is<br>
also possible to define types for Erlson dictionaries and have them<br>
checked by Dialyzer.<br>
<br>
Erlson dictionary syntax can be used in both .erl modules and Erlang<br>
shell. Its implementation is based on a customized version of<br>
"erl_parse.yrl", which extends several grammar rules and overloads<br>
existing syntax elements used by Erlang records. Because there was no<br>
need to introduce new syntax elements, the implementation turned out<br>
to be quite simple.<br>
<br>
There is a catch, though. The current Erlson implementation is based<br>
on the original "erl_parse.yrl" from R14B03 release. This makes Erlson<br>
incompatible with other Erlang releases if they have a different<br>
version of "erl_parse.yrl".<br>
<br>
Although it would be easy to provide Erlson-enabled "erl_parse.yrl"<br>
version for every Erlang release, I was thinking about of a less hacky<br>
and more reliable solution. And this brings me to the question:<br>
<br>
Would it be useful if Erlson or some subset/superset of it became a<br>
part of the Erlang language? What do you think?<br>
<br>
<br>
Anton<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br>