rescript-compiler
rescript-compiler copied to clipboard
[RFC] Dedicated syntax for creating Dicts
Dicts are important because they allow you to model things common in JS, and they compile to a straight forward JS object. Proposing a dedicated syntax for defining a DIct.t:
let myDict = dict{
"field1": "1",
"field2": "2",
"field3": "3"
}
This could parse to (which is the way you'd define it today, manually):
let myDict = Js.Dict.fromArray([
("field1", "1"),
("field2", "2"),
("field3", "3"),
])
And together with this https://github.com/rescript-lang/rescript-compiler/pull/6538 it could compile to:
var myDict = {
field1: "1",
field2: "2",
field3: "3",
}
I believe this would enhance ergonomics around dicts in the same way that the dedicated list{} syntax does for lists.
Related to this is also the question of whether dict should be a built in type.
Thoughts?
Related reading:
- https://github.com/rescript-lang/rescript-compiler/issues/2320
- https://github.com/rescript-lang/rescript-compiler/issues/6301
- (I can't find it now but there have been talks about extending the convention that
list{}uses, to things likeset{},map{}etc) - Half-broken PoC implementing the syntax parts: https://github.com/rescript-lang/rescript-compiler/tree/dict-dedicated-syntax
I'm all for it, dict literals are quite a pain today, this would fix the situation.
This would be awesome. Would also love to be able to spread dicts and append just like the "list" syntax for immutable operation. I'm sure I saw it mentioned somewhere, but pattern matching etc would be a dream as well.
For context: A old topic on syntax using braces list{}: https://github.com/rescript-lang/syntax/issues/690
dict will be an builtin type?
dictwill be an builtin type?
If we go ahead with this then yes, it should be moved to be a builtin.
I also agree spreading would be nice to support (that can compile to Object.assign()).