[erlang-questions] Maps
Vincent de Phily
vincent.dephily@REDACTED
Fri May 17 10:58:53 CEST 2013
On Thursday 16 May 2013 12:38:27 Loïc Hoguin wrote:
> On 05/16/2013 07:43 AM, Richard A. O'Keefe wrote:
> > Oddly enough, the EEP I've been working on (or at least Part 1, as I've
> > split it into four parts) _is_ syntax decoupled from the implementation.
> >
> > Here's a copy of the current draft. I'm about to go through the torture
> > of adding Markdown, sigh.
>
> If I understand right, you need '#[]' defined in the local module, and
> as such can only have one defined?
>
> This is going to be annoying when you want to use this syntax on both
> records and JSON and some other structure in the same module.
That worried me when reading the draft too. I expect that the answer is to
define :
> '#[]'({my_type, V}, K) -> extract_mytype(K,V);
> '#[]'(Other, K) -> erlang_default:'#[]'(Other, K).
But this can become ugly and unwieldy quickly. Perhaps we need a standard
wraper function :
> '#[]'(K,V,[]) -> erlang:error(badarg).
> '#[]'(K,V,[M|T]) -> try M:'#[]'(K,V) catch error:badarg -> '#[]'(K,V,T).
That we can use in each module as :
> '#[]'(K,V) -> '#[]'(K,V,[mytype,json,maps,lists...]).
But you need to order your modules very carefully, puting the most selective
ones first.
Appart from that, while this eep looks interesting, it doesn't seem to address
pattern matching ? Or did I read incorrectly and you actually can
> case Json of
> Json#['class']#['foo'] -> handle_foo(Json);
> Json#['class']#['bar'] -> handle_bar(Json);
> end.
?
--
Vincent de Phily
More information about the erlang-questions
mailing list