[racket-dev] Mangaging `unstable` with packages
The new package organization gives us a chance to re-asses the
"unstable" collection.
Going forward, I think the "unstable" collection should be used in the
following ways:
1. If you build something that you think is general-purpose, but is
only used in one package, put it in `unstable/foo`, but keep it inside
that package.
2. If you either (a) want to use some other package's `unstable/foo`
library, or (b) create such a library that's used across multiple
packages, create a separate package called "unstable-foo" for it.
It's perhaps worth saying why we still need "unstable" at all in the
new regime. We might just create a new package for, say, parameter
groups, and just add that as a dependency of "plot". But that would
ship a library in a useful location, and potentially commit us to that
library and API for the future. So I think we should keep "unstable"
around.
With that said, I'd like to also propose moving the following out of "unstable":
# `unstable/list`
- `remf`, `list-update` `list-set` `map/values`: move to `racket/list`
- `group-by`: rename to `group`, add keyword argument `#:by`
defaulting to `equal?`, move to `racket/list`
- `extend`, `filter/values`: move back into Typed Racket
- `list-prefix?`: move back into the web server
- `map2`, `check-duplicate`, `*-common-prefix`: Delete
# `unstable/parameter-group`
This is used by both the "image" and "plot" libraries. Create a new
top-level collection and package.
# `unstable/latent-contract`
Currently undocumented. Used by the image collection anyway. This
needs to be fixed.
That's it for things outside of the "unstable" package, which I'll
tackle another time.
Sam