-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Splitting containers #169
Comments
I can give my outside opinion: with what I can read, this seems like a very bad idea. The amount of energy asked for maintenance might take off very sharply. You would have to give to 8-10 packages the same amount of care as 1. Moreover I fear that discoverability would take a hit. Any chance you would be open to having multiple public libraries in the containers package? |
There are already packages for this. Let's not multiply them. Off the top of my head I can think of |
I ... don't know what this means. Why do you think maintenance costs will increase significantly? Why do you fear for discoverability? |
I'm specifically referring to https://fgaz.me/posts/2019-11-14-cabal-multiple-libraries/ that is implemented in Cabal & Hackage My fears (but they're mostly fears) are mainly that the amount of administrative tasks (revisions, version bumps, dependency bumps) might multiply and become unwieldy. Regarding discovery, well we suffer from quite a large problem of discoverability in the ecosystem, and I'm not sure it would be wise to prune Data.Tree & Graph from the package. That being I am absolutely willing to hear the argument that there will be documentation investments to point beginners in the right direction.
Is this something where https://hackage-search.serokell.io/?q=import.*Data.Graph could be useful? |
I'd probably just mechanically separate everything Juggling 8 boot packages would likely be quite a nightmare. |
I will read up on that, but the fact that it requires GHC 8.8 is going to be a problem for a while—
That is a reasonable concern. However, the extremely limited dependencies between the different components should make it tractable.
Sure, but what happens when Serokell no longer thinks that's worth its money to maintain? And how are people supposed to discover that resource anyway? |
I have the same intention with filepath, just fyi: haskell/filepath#192 And I agree that the |
I agree with previous comments and would advise against splitting
I understand the maintenance burden, and I'm okay with having |
This isn't a strong argument, because we can (hypothetically) have both
Also hash maps, dependent maps, priority queues, priority search queues, and
Yes, it certainly seems that that's what the community is buying into at the moment. I wish I had a better understanding of why that's all. Regardless, it is something.... |
https://nikita-volkov.github.io/internal-convention-is-a-mistake/ In short:
I don't have a strong opinion about splitting up into many packages, as long as the main But it's a maintenance burden for you, GHC devs and potential contributors. But both cabal and stack support multi package projects well. |
I'll say that I would consider this a good idea -- if not for the fact that it's a boot package. Splitting modules across libraries this way doesn't increase the size of the codebase in a significant way. It does increase the maintenance burden, but only insofar as it gives you finer control (and thus more room for error) over versioning and organization. It may even improve compile times if done well. Such splits also allow newcomers to target their improvements more precisely. However, because this is a boot package, I worry about the consequences of splitting it into more than, say, three or four. Even though the "user-facing surface area" of the library has not much changed, all of a sudden maintainers have to coordinate 8 sets of internal version bounds, release cycles, ticket labels... sounds like hell! |
The readme https://github.com/haskell/core-libraries-committee does not list the |
I don't see any point in splitting off |
Perhaps because it is not a core library, by the definition given in the readme?
Well no, sometimes it's really beneficial to have access to the internals. |
So actually this is not an issue to discuss on the CLC board? |
@jdkr It was just a request for advisory opinions on a library of some significance. |
It is indeed quite significant, which is why I've included it in the |
The boot libraries are not the same as the core libraries, though they generally overlap. Boot libraries are shipped with |
Yes, an easy example is the new filepath API that abstracts over the raw bytes of each platform and preserves them. The constructor to the bytes is not exposed by "proper" API, because it's really hard to use correctly. And yet, if you build another low-level library on top, that might be exactly what you want. So, smart constructors is a very prominent example. |
https://nikita-volkov.github.io/internal-convention-is-a-mistake/ I am glad this is getting spread around. @alexfmpe and I have looked at non empty containers at times, and wondering just how much we should worry about stability in the internals was a (albeit minor in the trand scheme of things) hangup. |
(IMO ideally boot libraries should be a subset of "core", so I'd welcome donation of @treeowl is there anything left to discuss here? |
Nope. |
I have been wanting to break up the
containers
package for some time, for several reasons:Data.Sequence
orData.Graph
is being used, I have to wade through all the packages usingData.Map
.Since
containers
came about long before I was involved, I would like to get input from the community. Here's a draft concept of packages:containers
: Everything except internals. This would be maintained indefinitely, but might eventually dropData.Tree
andData.Graph
. Users would be advised to consider using more specific packages instead to reduce their dependencies.containers-map
:Data.Map
,Data.Set
, and associated merge and list utility modulescontainers-map-internals
: The internals forcontainers-map
containers-intmap
:Data.IntMap
,Data.IntSet
, and associated merge and list utility modulescontainers-sequence
:Data.Sequence
containers-sequence-internals
: Internals forcontainers-sequence
containers-tree
:Data.Tree
containers-graph
:Data.Graph
Possibly also:
strict-maybe
: The strict version ofMaybe
strict-tuples
: Fully strict and left-strict pairs.The text was updated successfully, but these errors were encountered: