[erlang-questions] Maps
Ola Bäckström
Ola.Backstrom@REDACTED
Wed May 15 17:15:10 CEST 2013
> On Wed, 15 May 2013 04:20:20 -0400, Jesper Louis Andersen <jesper.louis.andersen@REDACTED> wrote:
[snip]
> I understand that. But why must (a) this new fast map implementation have
> an associated syntax, and (b) this syntax displace the syntax which *is*
> needed to implement pattern-matching of frames?
Could the syntax somehow be decoupled from the implementation, allowing for usage in both scenarios?
I just played with the idea a little... so assume the map implementation is found in the module 'coolmap'
A) To create a map, one would have to point out what implementation module that should do the job.
M = coolmap#{foo => 1, bar => 2, baz =>3}.
Since coolmap is an atom, the compiler knows this must be creation of a new map... thus translated to
M= coolmap:create([{foo, 1},{bar, 2}, {baz, 3}]).
The variable M should somewhere contain the module name, so that a call extract_module(M) returns coolmap.
B) To update a map,
M2 = M#{foo := 12}.
Since M isn't an atom the compiler understands that this translates to
M2= (extract_module(M)):update([{foo, 12}], M).
C) To introduce new keys
M3 = M2#{foo:=100, bary => 24}
The Since => is used in the expression this will be translated to another function:
M2= (extract_module(M2)):edit([{update, foo, 100},{set, foo, 12}], M2).
The above would allow anybody to create new implementations, could it be useful to allow Frames and Maps to share syntax?
More information about the erlang-questions
mailing list