Hello Alexander,

I see now that I misread your desugaring.

I read:

```
Map#{1: 6, bar: 'Hello', 2: 8};
```
as being desugared to:

```
Map[Symbol.literalOf]({1: 6, bar: 'Hello', 2: 8}[Symbol.iterator]());
```

But your proposal clearly states that is should be:

```
Map[Symbol.literalOf]([[1, 6], ['bar', 'Hello'], [2,8]][Symbol.iterator]());
```

Which would preserve lexical ordering of entries. The fault is completely
mine. Sorry.

I like this proposal as it is extensible and not that noisy in syntax.
Using the `#` for this doesn't
seem like a bad idea either. People coming from Erlang will be familiar
with this as well.


2015-10-28 10:53 GMT+01:00 Alexander Jones <a...@weej.com>:

> Hi Victor
>
> Not sure I understand - the desugaring I wrote would absolutely preserve
> the written ordering because it speaks in terms of an ArrayIterator of
> key-value pairs. If the map type to which it's applied chooses to forget
> the ordering then that's fine.
>
> Alex
>
>
> On Wednesday, 28 October 2015, Viktor Kronvall <viktor.kronv...@gmail.com>
> wrote:
>
>> > ```
>> > const map = IMap#{"foo": 42, bar: 44};
>> > ```
>> > It could desugar as, for the sake of example:
>> >
>> > ```
>> > Foo#{key: value, ...}
>> > ➔
>> > Foo[Symbol.literalOf]([[key, value], ...][Symbol.iterator]())
>> > ```
>>
>> I like this proposal. However, Maps should guarantee insertion order when
>> traversing the keys and values and desugaring it like that does not respect
>> this guarantee or more precisely it will lead to (in my opinion) unexpected
>> order of the keys.
>>
>> ```
>> Object.keys({1: 6, bar: 'Hello', 2: 8}); // → [ '1', '2', 'bar' ]
>> ```
>>
>> If I'm not mistaken this will be same order for `{1: 6, bar: 'Hello', 2:
>> 8}[Symbol.iterator]()`.
>>
>> This implies that:
>>
>> ```
>> Map#{1: 6, bar: 'Hello', 2: 8};
>> ```
>>
>> Will not have entries in the order `[[1, 6], ['bar', 'Hello'], [2,8]]`
>> but instead `[[1,6], [2,8], ['bar','Hello']]`.
>>
>> This means that possible future destructuring of a Map will be harder to
>> reason about.
>>
>>
>> 2015-10-28 2:21 GMT+01:00 Alexander Jones <a...@weej.com>:
>>
>>> True, but easy to mess up and only be treated to a runtime error. Three
>>> nested brackets at the start and end could definitely be better, and
>>> this just encourages people to use POJSOs instead. Also not a very uniform
>>> interface if you look at how to construct a Map, Set or Immutable.List at
>>> present, though admittedly constructor call for the ES6 types would be a
>>> partial improvement.
>>>
>>> On Wednesday, 28 October 2015, Tab Atkins Jr. <jackalm...@gmail.com>
>>> wrote:
>>>
>>>> On Wed, Oct 28, 2015 at 8:36 AM, Alexander Jones <a...@weej.com> wrote:
>>>> > I agree this is pretty important. Using actual maps really frees up a
>>>> lot of
>>>> > complexity, but the syntax is cumbersome to say the least.
>>>> >
>>>> > Whatever the decided syntax, bare words as string keys is a really
>>>> bad idea
>>>> > IMO. The key syntax should be parsed as an expression, like the
>>>> values are,
>>>> > and like they are in basically every other language.
>>>> >
>>>> > Another outstanding issue is that we might want the syntax for
>>>> > `Immutable.Map`, or `WeakMap`, or `MapTwoPointOh` that improves
>>>> deficiency
>>>> > $x, $y and $z. I'd say introducing a special syntax for `Map` right
>>>> now is
>>>> > not ideal.
>>>>
>>>> Currently, the "extensible literal syntax" for this isn't that bad:
>>>>
>>>> const bar = 43;
>>>> const map = Immutable.Map([["foo", 42], [bar, 44]]);
>>>>
>>>> It's a little more verbose because the entries have to be surrounded
>>>> by [], but hey.
>>>>
>>>> ~TJ
>>>>
>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss@mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to