-
Notifications
You must be signed in to change notification settings - Fork 30
Open
Description
Following the discussion about immutable defaults in https://forum.rescript-lang.org/t/ann-rescript-core-a-new-batteries-included-drop-in-standard-library/4149, let's discuss which API:s are problematic and what we can do to remedy that.
First off, there's a few things we need to keep in mind in this discussion:
- A goal is to stay close to the JS API:s (deliberately not saying "as close as possible", but close). This means we have wiggle room to brush over inconsistencies and "improve" the JS API:s we bind to so they make more sense for idiomatic ReScript usage, where it makes sense. But a complete overhaul of API:s isn't something we'll pursue for
Core. Not everyone is going to agree with this, and that's fine. But that's the way forward forCore. - For full immutability,
Beltis still a great alternative, andBeltisn't going anywhere, it'll keep being around.
With that said, providing immutable defaults where it makes sense is definitively a good idea. So, let's detail what API:s are problematic right now. Please write down the API:s with mutability you worry about, and we'll discuss what we can do about it, if anything.
Let's also discuss what we can do about the mutable API:s to make it apparent that they're mutable. A few things come to mind:
- Return
unitalways, even if the underlying JS API returns itself mutated. One example for this isMap.setwhich mutates and returns itself. This would returnunitinstead to signify that it's mutating. - Naming. This is already the case, suffixing functions mutating the original thing with
inPlace. We can check that that's consistent. - Doc strings. Have a bolded
**This mutates the original array**on top of each doc string, plus suggesting the immutable alternative. This will make it very apparent that you're using a mutable API as you're working in your editor.
fhammerschmidt, hoichi, yunti, cknitt, hellos3b and 2 more
Metadata
Metadata
Assignees
Labels
No labels