From kindaro at gmail.com Thu Dec 10 11:23:42 2020 From: kindaro at gmail.com (Ignat Insarov) Date: Thu, 10 Dec 2020 16:23:42 +0500 Subject: [HF-discuss] Do something about Cabal? Message-ID: # Do something about Cabal? Hello. Cabal is the second most used tool in Haskell after GHC. It has many problems. It may be noticed that there is one and a half developers working on it. This is clearly not enough to address these problems. I propose that this is a good place to invest in. ### Problems I have in mind: * Poor communication, lack of open source development process. The whole Cabal–Stack schism appears to be an outcome of poor communication. One of the leading developers of Cabal is even banned from participation somewhere in Stack circles.[1] Personally, I reported several issues to Cabal and every single time it resulted in sadness. Observe a vicious circle: core developers are overworked ⇒ they are being unfriendly ⇒ there are fewer contributors ⇒ core developers are overworked. I have no hard evidence but it appears that presently, more people that strive to improve the Haskell build experience are outside the Cabal cabal than are inside. * User experience is an afterthought. Cabal's user experience is horrifying. A collection of complaints is being compiled elsewhere.[2] There are also bugs being opened to Cabal because of this, requiring triage and therefore wasting the precious time of the few overworked developers. Stack is much more friendly — this shows by example that the user experience problem is not inherent and may be solved. It is ordinary to receive output like this: ``` % cabal run example-executable Warning: The package list for 'hackage.haskell.org' is 84 days old. Run 'cabal update' to get the latest list of available packages. Resolving dependencies... cabal: Could not resolve dependencies: [__0] trying: example-0.1.0.6 (user goal) [__1] next goal: opaleye (dependency of example) [__1] rejecting: opaleye-0.7.1.0, opaleye-0.7.0.0 (constraint from project config TODO requires ==0.6.7006.1) [__1] rejecting: opaleye-0.6.7006.1 (conflict: example => opaleye^>=0.7) [__1] skipping: opaleye-0.6.7006.0, opaleye-0.6.7005.0, opaleye-0.6.7004.2, opaleye-0.6.7004.1, opaleye-0.6.7004.0, opaleye-0.6.7003.1, opaleye-0.6.7003.0, opaleye-0.6.1.0, opaleye-0.6.0.0, opaleye-0.5.4.0, opaleye-0.5.3.1, opaleye-0.5.3.0, opaleye-0.5.2.2, opaleye-0.5.2.0, opaleye-0.5.1.1, opaleye-0.5.1.0, opaleye-0.5.0.0, opaleye-0.4.2.0, opaleye-0.4.1.0, opaleye-0.4.0.0, opaleye-0.3.1.2, opaleye-0.3.1, opaleye-0.3, opaleye-0.2, opaleye-0.6.7002.0, opaleye-0.6.7001.0, opaleye-0.6.7000.0, opaleye-0.5.2.1, opaleye-0.3.1.1 (has the same characteristics that caused the previous version to fail: excluded by constraint '^>=0.7' from example) [__1] fail (backjumping, conflict set: example, opaleye) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: opaleye, example ``` There are so many things that are wrong here. Even a sneaky _«to do»_ remark. If you wonder, in this case the solution is to remove and re-generate `cabal.project.freeze`. Even the name of the program — it is actually _«cabal-install»_ — is incomprehensible, it should be re-branded to Cabal, which is how everyone calls it anyway. * Features are not being introduced. There is no reason for two build tools to exist. The killer feature of Stack — snapshots — should be supported by Cabal. Possibly Cabal itself should be refactored and split so that there are separate tools for packaging, version resolution and human interaction — I do not know. But certainly the way things are presently is a waste of developer effort and a source of confusion for everyone. ### My proposition, in particular. * Ask all the people that show compassion to the cause of a great Haskell build tool to unite and work together on a better Cabal. This includes the developers of Stack and everyone that expressed unhappiness with the current state of Cabal. These people should be seen as a blessing, not as an obstacle. * Put in place a clear process for contributing and decision making, so that it does not come down to the privileged opinion of one of the core developers. * Make a model of user experience that Cabal should conform to, and make conformance a priority. Surely there are among us people that know a thing or two about user experience — call for them to step forward. Every issue that stems from misunderstanding, re-assign to the model instead of closing. * Merge the support of Stackage snapshots into Cabal. Ask the core developers of Stack to join the effort. Transition from Stack to Cabal should be one well discoverable command that just works. I realize that this letter is largely an opinion piece. You can also see it as an _«ideal piece»_. Without an ideal, without a vision, we are stuck with the present. I do not insist that my vision is the best. But the present reality is not the best vision either. I propose, foremost, that we work and fight for a better future. [1]: https://github.com/commercialhaskell/stackage/issues/4472 [2]: https://github.com/tomjaguarpaw/tilapia/issues?q=is%3Aissue+is%3Aopen+cabal From fa-ml at ariis.it Thu Dec 10 13:16:44 2020 From: fa-ml at ariis.it (Francesco Ariis) Date: Thu, 10 Dec 2020 14:16:44 +0100 Subject: [HF-discuss] Do something about Cabal? In-Reply-To: References: Message-ID: <20201210131644.GC902@extensa> Il 10 dicembre 2020 alle 16:23 Ignat Insarov via hf-discuss ha scritto: > * User experience is an afterthought. > […] > * Features are not being introduced. I am not a power user, but in the last years — from the introduction of new- commands — I have enjoyed using cabal very much. Also each time I download a new version I see small little things added (a working v2-install, projects, etc.) and updated documentation. > There is no reason for two build tools to exist. The killer feature of Stack — > snapshots — should be supported by Cabal. As far as I know, this is already possible today! [1] > Personally, I reported several > issues to Cabal and every single time it resulted in sadness. The few time I interacted with cabal/hackage developers — admittedly for low-complexity issues — they were helpful. In one case some prodding was necessary (and way less than e.g. with my bank, a service I pay for) —F [1] https://github.com/fpco/stackage-server/issues/232 see also https://github.com/erikd/jenga/ https://hackage.haskell.org/package/stack2cabal From kindaro at gmail.com Thu Dec 10 14:06:31 2020 From: kindaro at gmail.com (Ignat Insarov) Date: Thu, 10 Dec 2020 19:06:31 +0500 Subject: [HF-discuss] Do something about Cabal? In-Reply-To: <20201210131644.GC902@extensa> References: <20201210131644.GC902@extensa> Message-ID: Thanks Francesco. I have also been using Cabal since a long time ago. There is no question that some great things get done in Cabal. Mostly, Cabal does what it says on the box, and this is why I propose to improve it and not, say, move to Stack. But you may see that many people prefer the latter — this seems even more weird since, as you illuminate, Cabal can already interoperate with Stackage, so it is strictly more featureful. _(As far as I follow, Stack still has poor support for Backpack and sub-package build targets.)_ However, even in the light of the links you provide, we still cannot say that Cabal supports Stackage. You say: > > There is no reason for two build tools to exist. The killer feature of Stack — > > snapshots — should be supported by Cabal. > > As far as I know, this is already possible today! [1] > > [1] https://github.com/fpco/stackage-server/issues/232 > see also https://github.com/erikd/jenga/ > https://hackage.haskell.org/package/stack2cabal Heading to that link, the closing message says: > I've added a warning about the lack of support for revisions in cabal.config in f9632d7. Closing. So, something is not working. Reading in more detail, there is evidently a disagreement between the core developers of Cabal and Stack. And as I understand, it has not been addressed ever since! This is exactly an example of the kind of communication problems that I alluded to in my first letter. Also, as far as I can see, there has been zero effort from the Cabal team to integrate these other tools that you point to. From kovanikov at gmail.com Thu Dec 10 15:02:37 2020 From: kovanikov at gmail.com (Dmitrii Kovanikov) Date: Thu, 10 Dec 2020 15:02:37 +0000 Subject: [HF-discuss] Do something about Cabal? In-Reply-To: References: <20201210131644.GC902@extensa> Message-ID: Thanks, Ignat for bringing this issue! This is indeed a problem in the Haskell community and ecosystem at the moment, and we can't just ignore it if we want to improve things. Every Haskell developer uses the build tool. This is a crucial piece of development toolchain. That's why it's sad if a core tool is maintained only by a single person, maintainers are not willing to have more open-minded discussions regarding some user-requested features or a tool have poor UX. In my vision, everyone should be welcome to open issues to a build tool and contribute to it as everyone will benefit from improvements. And it's a pity that some people have a negative experience with this process which drives contributors away. I'm following the Cabal issue tracker, so I notice from time to time some not friendly behaviour towards its users. In the same spirit, having multiple build tools leads to duplication of effort for fixing the same problems and implementing the same features. Writing a build tool requires a colossal amount of effort and time. Not to mention that supporting both build tools is an enormous job as well. * If your project builds with Cabal, it's not guaranteed to build with Stack (at least you need to write stack.yaml). * If your project builds with Stack, it's not guaranteed to build with Cabal (you may need to specify upper and lower bounds). Thus, every maintainer must spend a lot of time maintaining support for both build tools if they want to provide good UX for everyone. I'm doing this for multiple years, and it's a troublesome process, but I do believe that thinking about users first is the way forward. This effort seems redundant in a theoretical world where Haskell has a single, core, official, open-sourced build tool managed by the community. > I have enjoyed using cabal very much I'm also using Cabal for my personal projects, but this doesn't mean there are no problems. I learned to circumvent build tools pitfalls and survive in the ocean of incomprehensible errors, but I'm already in the middle of the ocean, and I don't want to stop swimming. Beginners, who are just staying on the coast, might not want to go into it at all. Best, Dmitrii On Thu, 10 Dec 2020 at 14:06, Ignat Insarov via hf-discuss < hf-discuss at haskell.org> wrote: > Thanks Francesco. I have also been using Cabal since a long time ago. > There is no question that some great things get done in Cabal. Mostly, > Cabal does what it says on the box, and this is why I propose to > improve it and not, say, move to Stack. But you may see that many > people prefer the latter — this seems even more weird since, as you > illuminate, Cabal can already interoperate with Stackage, so it is > strictly more featureful. _(As far as I follow, Stack still has poor > support for Backpack and sub-package build targets.)_ > > However, even in the light of the links you provide, we still cannot > say that Cabal supports Stackage. You say: > > > > There is no reason for two build tools to exist. The killer feature > of Stack — > > > snapshots — should be supported by Cabal. > > > > As far as I know, this is already possible today! [1] > > > > [1] https://github.com/fpco/stackage-server/issues/232 > > see also https://github.com/erikd/jenga/ > > https://hackage.haskell.org/package/stack2cabal > > Heading to that link, the closing message says: > > > I've added a warning about the lack of support for revisions in > cabal.config in f9632d7. Closing. > > So, something is not working. Reading in more detail, there is > evidently a disagreement between the core developers of Cabal and > Stack. And as I understand, it has not been addressed ever since! This > is exactly an example of the kind of communication problems that I > alluded to in my first letter. Also, as far as I can see, there has > been zero effort from the Cabal team to integrate these other tools > that you point to. > _______________________________________________ > hf-discuss mailing list > hf-discuss at haskell.org > https://mail.haskell.org/cgi-bin/mailman/listinfo/hf-discuss > -------------- next part -------------- An HTML attachment was scrubbed... URL: From chilledfrogs at disroot.org Thu Dec 10 11:42:15 2020 From: chilledfrogs at disroot.org (Allen Sobot) Date: Thu, 10 Dec 2020 12:42:15 +0100 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: References: Message-ID: <67B43049-BDF9-4F4F-8C76-E484D8C8CFDF@disroot.org> As a still (very) new Haskell user by many measures, indeed the little experience I had with Cabal isn't great overall in my view (honestly not a fan of Stack grabbing separate GHC instances though either unless I pass like 2 command-line flags, if there's a configuration option I'm not aware of I'd be grateful). I had no clue about the communication issues etc. plaguing Cabal, that explains a bit... In any case I'd like to try to contribute what I can to this effort, mainly to improve the UX which I agree is absolutely terrible in my humble opinion. (Side note: I was informed on another mailing list that I may have some setting pertaining to forcing some kind of read receipt which is considered impolite on mailing lists, if this is still the case I apologize and I'm trying to determine what even is the precise issue or setting controlling it, at least on K-9 Mail and Neomutt) On December 10, 2020 12:23:42 p.m. GMT+01:00, Ignat Insarov wrote: ># Do something about Cabal? > >Hello. > >Cabal is the second most used tool in Haskell after GHC. It has many >problems. It may be noticed that there is one and a half developers working on >it. This is clearly not enough to address these problems. I propose that this is >a good place to invest in. > >### Problems I have in mind: > >* Poor communication, lack of open source development process. > > The whole Cabal–Stack schism appears to be an outcome of poor > communication. One of the leading developers of Cabal is even banned from > participation somewhere in Stack circles.[1] Personally, I reported several > issues to Cabal and every single time it resulted in sadness. Observe a > vicious circle: core developers are overworked ⇒ they are being unfriendly ⇒ > there are fewer contributors ⇒ core developers are overworked. > > I have no hard evidence but it appears that presently, more people that strive > to improve the Haskell build experience are outside the Cabal cabal than are > inside. > >* User experience is an afterthought. > > Cabal's user experience is horrifying. A collection of complaints is being > compiled elsewhere.[2] There are also bugs being opened to Cabal because of > this, requiring triage and therefore wasting the precious time of the few > overworked developers. Stack is much more friendly — this shows by example > that the user experience problem is not inherent and may be solved. > > It is ordinary to receive output like this: > > ``` > % cabal run example-executable > Warning: The package list for 'hackage.haskell.org' is 84 days old. > Run 'cabal update' to get the latest list of available packages. > Resolving dependencies... > cabal: Could not resolve dependencies: > [__0] trying: example-0.1.0.6 (user goal) > [__1] next goal: opaleye (dependency of example) > [__1] rejecting: opaleye-0.7.1.0, opaleye-0.7.0.0 (constraint from project > config TODO requires ==0.6.7006.1) > [__1] rejecting: opaleye-0.6.7006.1 (conflict: example => opaleye^>=0.7) > [__1] skipping: opaleye-0.6.7006.0, opaleye-0.6.7005.0, opaleye-0.6.7004.2, > opaleye-0.6.7004.1, opaleye-0.6.7004.0, opaleye-0.6.7003.1, > opaleye-0.6.7003.0, opaleye-0.6.1.0, opaleye-0.6.0.0, opaleye-0.5.4.0, > opaleye-0.5.3.1, opaleye-0.5.3.0, opaleye-0.5.2.2, opaleye-0.5.2.0, > opaleye-0.5.1.1, opaleye-0.5.1.0, opaleye-0.5.0.0, opaleye-0.4.2.0, > opaleye-0.4.1.0, opaleye-0.4.0.0, opaleye-0.3.1.2, opaleye-0.3.1, opaleye-0.3, > opaleye-0.2, opaleye-0.6.7002.0, opaleye-0.6.7001.0, opaleye-0.6.7000.0, > opaleye-0.5.2.1, opaleye-0.3.1.1 (has the same characteristics that caused the > previous version to fail: excluded by constraint '^>=0.7' from example) > [__1] fail (backjumping, conflict set: example, opaleye) > After searching the rest of the dependency tree exhaustively, these were the > goals I've had most trouble fulfilling: opaleye, example > ``` > > There are so many things that are wrong here. Even a sneaky _«to do»_ > remark. If you wonder, in this case the solution is to remove and re-generate > `cabal.project.freeze`. > > Even the name of the program — it is actually _«cabal-install»_ — is > incomprehensible, it should be re-branded to Cabal, which is how everyone > calls it anyway. > >* Features are not being introduced. > > There is no reason for two build tools to exist. The killer feature of Stack — > snapshots — should be supported by Cabal. Possibly Cabal itself should be > refactored and split so that there are separate tools for packaging, version > resolution and human interaction — I do not know. But certainly the way things > are presently is a waste of developer effort and a source of confusion for > everyone. > >### My proposition, in particular. > >* Ask all the people that show compassion to the cause of a great Haskell build > tool to unite and work together on a better Cabal. This includes the > developers of Stack and everyone that expressed unhappiness with the current > state of Cabal. These people should be seen as a blessing, not as an obstacle. >* Put in place a clear process for contributing and decision making, so that it > does not come down to the privileged opinion of one of the core developers. >* Make a model of user experience that Cabal should conform to, and make > conformance a priority. Surely there are among us people that know a thing or > two about user experience — call for them to step forward. Every issue that > stems from misunderstanding, re-assign to the model instead of closing. >* Merge the support of Stackage snapshots into Cabal. Ask the core developers of > Stack to join the effort. Transition from Stack to Cabal should be one well > discoverable command that just works. > >I realize that this letter is largely an opinion piece. You can also see it as >an _«ideal piece»_. Without an ideal, without a vision, we are stuck with the >present. I do not insist that my vision is the best. But the present reality is >not the best vision either. I propose, foremost, that we work and fight for a >better future. > >[1]: https://github.com/commercialhaskell/stackage/issues/4472 >[2]: https://github.com/tomjaguarpaw/tilapia/issues?q=is%3Aissue+is%3Aopen+cabal >_______________________________________________ >Haskell-Cafe mailing list >To (un)subscribe, modify options or view archives go to: >http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe >Only members subscribed via the mailman list are allowed to post. From compl.yue at icloud.com Thu Dec 10 13:46:59 2020 From: compl.yue at icloud.com (YueCompl) Date: Thu, 10 Dec 2020 21:46:59 +0800 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: References: Message-ID: Personally, when working with Haskell, I miss very much the Gophers' pragmatic attitude in building projects from source, the redundancy of specifications is reduced to extreme where possible, then you usually only need to care about each individual source file. Even with recent [Go Modules](https://golang.org/ref/mod ) mechanism, the norm is to edit source files then your `go.mod` file is maintained by tools automatically, you can fix it when auto-updates went wrong, but never have to maintain it yourself. Cabal's principle seems rather cautious in comparison, it worries about you be making mistakes to mis-express your intention by accident, so require warrant of your actions by supplying consistent information allover different places with possibly multiple pieces of submission containing redundant information. It is crucial to need 2 (or more) keys for a nuclear weapon launching panel to be triggerable, but building a project? I think we can take that a lot easier. I suppose the really hard part of a modern build system is neither compiling/linking nor even project local dependency anymore, it is management of external dependencies now. I'm happy to see Cabal v2 took Nix as the example to follow, but yet there are still huge spaces for improvement in ergonomics respects. I don't expect Haskell/GHC to be that popular like JavaScript/NodeJS, [npm](https://www.npmjs.com/ ) in a sense may be too successful in ergonomics, that local disk capacity of a developer's machine becomes the sole bottleneck, but there are things definitely improvable after Nix style building modes, so I anticipate a Cabal v3 sooner than later. Sincerely, Compl > On 2020-12-10, at 19:23, Ignat Insarov wrote: > > # Do something about Cabal? > > Hello. > > Cabal is the second most used tool in Haskell after GHC. It has many > problems. It may be noticed that there is one and a half developers working on > it. This is clearly not enough to address these problems. I propose that this is > a good place to invest in. > > ### Problems I have in mind: > > * Poor communication, lack of open source development process. > > The whole Cabal–Stack schism appears to be an outcome of poor > communication. One of the leading developers of Cabal is even banned from > participation somewhere in Stack circles.[1] Personally, I reported several > issues to Cabal and every single time it resulted in sadness. Observe a > vicious circle: core developers are overworked ⇒ they are being unfriendly ⇒ > there are fewer contributors ⇒ core developers are overworked. > > I have no hard evidence but it appears that presently, more people that strive > to improve the Haskell build experience are outside the Cabal cabal than are > inside. > > * User experience is an afterthought. > > Cabal's user experience is horrifying. A collection of complaints is being > compiled elsewhere.[2] There are also bugs being opened to Cabal because of > this, requiring triage and therefore wasting the precious time of the few > overworked developers. Stack is much more friendly — this shows by example > that the user experience problem is not inherent and may be solved. > > It is ordinary to receive output like this: > > ``` > % cabal run example-executable > Warning: The package list for 'hackage.haskell.org' is 84 days old. > Run 'cabal update' to get the latest list of available packages. > Resolving dependencies... > cabal: Could not resolve dependencies: > [__0] trying: example-0.1.0.6 (user goal) > [__1] next goal: opaleye (dependency of example) > [__1] rejecting: opaleye-0.7.1.0, opaleye-0.7.0.0 (constraint from project > config TODO requires ==0.6.7006.1) > [__1] rejecting: opaleye-0.6.7006.1 (conflict: example => opaleye^>=0.7) > [__1] skipping: opaleye-0.6.7006.0, opaleye-0.6.7005.0, opaleye-0.6.7004.2, > opaleye-0.6.7004.1, opaleye-0.6.7004.0, opaleye-0.6.7003.1, > opaleye-0.6.7003.0, opaleye-0.6.1.0, opaleye-0.6.0.0, opaleye-0.5.4.0, > opaleye-0.5.3.1, opaleye-0.5.3.0, opaleye-0.5.2.2, opaleye-0.5.2.0, > opaleye-0.5.1.1, opaleye-0.5.1.0, opaleye-0.5.0.0, opaleye-0.4.2.0, > opaleye-0.4.1.0, opaleye-0.4.0.0, opaleye-0.3.1.2, opaleye-0.3.1, opaleye-0.3, > opaleye-0.2, opaleye-0.6.7002.0, opaleye-0.6.7001.0, opaleye-0.6.7000.0, > opaleye-0.5.2.1, opaleye-0.3.1.1 (has the same characteristics that caused the > previous version to fail: excluded by constraint '^>=0.7' from example) > [__1] fail (backjumping, conflict set: example, opaleye) > After searching the rest of the dependency tree exhaustively, these were the > goals I've had most trouble fulfilling: opaleye, example > ``` > > There are so many things that are wrong here. Even a sneaky _«to do»_ > remark. If you wonder, in this case the solution is to remove and re-generate > `cabal.project.freeze`. > > Even the name of the program — it is actually _«cabal-install»_ — is > incomprehensible, it should be re-branded to Cabal, which is how everyone > calls it anyway. > > * Features are not being introduced. > > There is no reason for two build tools to exist. The killer feature of Stack — > snapshots — should be supported by Cabal. Possibly Cabal itself should be > refactored and split so that there are separate tools for packaging, version > resolution and human interaction — I do not know. But certainly the way things > are presently is a waste of developer effort and a source of confusion for > everyone. > > ### My proposition, in particular. > > * Ask all the people that show compassion to the cause of a great Haskell build > tool to unite and work together on a better Cabal. This includes the > developers of Stack and everyone that expressed unhappiness with the current > state of Cabal. These people should be seen as a blessing, not as an obstacle. > * Put in place a clear process for contributing and decision making, so that it > does not come down to the privileged opinion of one of the core developers. > * Make a model of user experience that Cabal should conform to, and make > conformance a priority. Surely there are among us people that know a thing or > two about user experience — call for them to step forward. Every issue that > stems from misunderstanding, re-assign to the model instead of closing. > * Merge the support of Stackage snapshots into Cabal. Ask the core developers of > Stack to join the effort. Transition from Stack to Cabal should be one well > discoverable command that just works. > > I realize that this letter is largely an opinion piece. You can also see it as > an _«ideal piece»_. Without an ideal, without a vision, we are stuck with the > present. I do not insist that my vision is the best. But the present reality is > not the best vision either. I propose, foremost, that we work and fight for a > better future. > > [1]: https://github.com/commercialhaskell/stackage/issues/4472 > [2]: https://github.com/tomjaguarpaw/tilapia/issues?q=is%3Aissue+is%3Aopen+cabal > _______________________________________________ > Haskell-Cafe mailing list > To (un)subscribe, modify options or view archives go to: > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe > Only members subscribed via the mailman list are allowed to post. -------------- next part -------------- An HTML attachment was scrubbed... URL: From jho.xray at gmail.com Thu Dec 10 14:17:39 2020 From: jho.xray at gmail.com (J Ho) Date: Thu, 10 Dec 2020 15:17:39 +0100 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: References: <20201210131644.GC902@extensa> Message-ID: What's wrong with Stack though? Works like a charm in all our projects, and with Nix integration takes care of the external c-libs etc dependencies quite nicely. On Thu, Dec 10, 2020 at 3:07 PM Ignat Insarov wrote: > Thanks Francesco. I have also been using Cabal since a long time ago. > There is no question that some great things get done in Cabal. Mostly, > Cabal does what it says on the box, and this is why I propose to > improve it and not, say, move to Stack. But you may see that many > people prefer the latter — this seems even more weird since, as you > illuminate, Cabal can already interoperate with Stackage, so it is > strictly more featureful. _(As far as I follow, Stack still has poor > support for Backpack and sub-package build targets.)_ > > However, even in the light of the links you provide, we still cannot > say that Cabal supports Stackage. You say: > > > > There is no reason for two build tools to exist. The killer feature > of Stack — > > > snapshots — should be supported by Cabal. > > > > As far as I know, this is already possible today! [1] > > > > [1] https://github.com/fpco/stackage-server/issues/232 > > see also https://github.com/erikd/jenga/ > > https://hackage.haskell.org/package/stack2cabal > > Heading to that link, the closing message says: > > > I've added a warning about the lack of support for revisions in > cabal.config in f9632d7. Closing. > > So, something is not working. Reading in more detail, there is > evidently a disagreement between the core developers of Cabal and > Stack. And as I understand, it has not been addressed ever since! This > is exactly an example of the kind of communication problems that I > alluded to in my first letter. Also, as far as I can see, there has > been zero effort from the Cabal team to integrate these other tools > that you point to. > _______________________________________________ > Haskell-Cafe mailing list > To (un)subscribe, modify options or view archives go to: > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe > Only members subscribed via the mailman list are allowed to post. -------------- next part -------------- An HTML attachment was scrubbed... URL: From rae at richarde.dev Thu Dec 10 19:50:04 2020 From: rae at richarde.dev (Richard Eisenberg) Date: Thu, 10 Dec 2020 19:50:04 +0000 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: <67B43049-BDF9-4F4F-8C76-E484D8C8CFDF@disroot.org> References: <67B43049-BDF9-4F4F-8C76-E484D8C8CFDF@disroot.org> Message-ID: <010f01764e341294-7a0a53b6-ee76-4330-979c-a0dad7a7c113-000000@us-east-2.amazonses.com> In my view, a lack of communication like the one highlighted here is exactly what the Haskell Foundation hopes to improve. It's still being bootstrapped, so don't expect any action soon, but I would hope for forward motion by the springtime. Of course, the HF needs all of us to be the best foundation it can -- so please consider nominating yourself for a board position (https://haskell.foundation/board-nominations/) and/or applying for the executive director (full-time, salaried) position (https://haskell.foundation/ed-job-description/)! In either role, you could have direct impact on moving this all forward. Richard > On Dec 10, 2020, at 6:42 AM, Allen Sobot via hf-discuss wrote: > > As a still (very) new Haskell user by many measures, indeed the little experience I had with Cabal isn't great overall in my view (honestly not a fan of Stack grabbing separate GHC instances though either unless I pass like 2 command-line flags, if there's a configuration option I'm not aware of I'd be grateful). > > I had no clue about the communication issues etc. plaguing Cabal, that explains a bit... > > In any case I'd like to try to contribute what I can to this effort, mainly to improve the UX which I agree is absolutely terrible in my humble opinion. > > (Side note: I was informed on another mailing list that I may have some setting pertaining to forcing some kind of read receipt which is considered impolite on mailing lists, if this is still the case I apologize and I'm trying to determine what even is the precise issue or setting controlling it, at least on K-9 Mail and Neomutt) > > On December 10, 2020 12:23:42 p.m. GMT+01:00, Ignat Insarov > wrote: >> # Do something about Cabal? >> >> Hello. >> >> Cabal is the second most used tool in Haskell after GHC. It has many >> problems. It may be noticed that there is one and a half developers working on >> it. This is clearly not enough to address these problems. I propose that this is >> a good place to invest in. >> >> ### Problems I have in mind: >> >> * Poor communication, lack of open source development process. >> >> The whole Cabal–Stack schism appears to be an outcome of poor >> communication. One of the leading developers of Cabal is even banned from >> participation somewhere in Stack circles.[1] Personally, I reported several >> issues to Cabal and every single time it resulted in sadness. Observe a >> vicious circle: core developers are overworked ⇒ they are being unfriendly ⇒ >> there are fewer contributors ⇒ core developers are overworked. >> >> I have no hard evidence but it appears that presently, more people that strive >> to improve the Haskell build experience are outside the Cabal cabal than are >> inside. >> >> * User experience is an afterthought. >> >> Cabal's user experience is horrifying. A collection of complaints is being >> compiled elsewhere.[2] There are also bugs being opened to Cabal because of >> this, requiring triage and therefore wasting the precious time of the few >> overworked developers. Stack is much more friendly — this shows by example >> that the user experience problem is not inherent and may be solved. >> >> It is ordinary to receive output like this: >> >> ``` >> % cabal run example-executable >> Warning: The package list for 'hackage.haskell.org' is 84 days old. >> Run 'cabal update' to get the latest list of available packages. >> Resolving dependencies... >> cabal: Could not resolve dependencies: >> [__0] trying: example-0.1.0.6 (user goal) >> [__1] next goal: opaleye (dependency of example) >> [__1] rejecting: opaleye-0.7.1.0, opaleye-0.7.0.0 (constraint from project >> config TODO requires ==0.6.7006.1) >> [__1] rejecting: opaleye-0.6.7006.1 (conflict: example => opaleye^>=0.7) >> [__1] skipping: opaleye-0.6.7006.0, opaleye-0.6.7005.0, opaleye-0.6.7004.2, >> opaleye-0.6.7004.1, opaleye-0.6.7004.0, opaleye-0.6.7003.1, >> opaleye-0.6.7003.0, opaleye-0.6.1.0, opaleye-0.6.0.0, opaleye-0.5.4.0, >> opaleye-0.5.3.1, opaleye-0.5.3.0, opaleye-0.5.2.2, opaleye-0.5.2.0, >> opaleye-0.5.1.1, opaleye-0.5.1.0, opaleye-0.5.0.0, opaleye-0.4.2.0, >> opaleye-0.4.1.0, opaleye-0.4.0.0, opaleye-0.3.1.2, opaleye-0.3.1, opaleye-0.3, >> opaleye-0.2, opaleye-0.6.7002.0, opaleye-0.6.7001.0, opaleye-0.6.7000.0, >> opaleye-0.5.2.1, opaleye-0.3.1.1 (has the same characteristics that caused the >> previous version to fail: excluded by constraint '^>=0.7' from example) >> [__1] fail (backjumping, conflict set: example, opaleye) >> After searching the rest of the dependency tree exhaustively, these were the >> goals I've had most trouble fulfilling: opaleye, example >> ``` >> >> There are so many things that are wrong here. Even a sneaky _«to do»_ >> remark. If you wonder, in this case the solution is to remove and re-generate >> `cabal.project.freeze`. >> >> Even the name of the program — it is actually _«cabal-install»_ — is >> incomprehensible, it should be re-branded to Cabal, which is how everyone >> calls it anyway. >> >> * Features are not being introduced. >> >> There is no reason for two build tools to exist. The killer feature of Stack — >> snapshots — should be supported by Cabal. Possibly Cabal itself should be >> refactored and split so that there are separate tools for packaging, version >> resolution and human interaction — I do not know. But certainly the way things >> are presently is a waste of developer effort and a source of confusion for >> everyone. >> >> ### My proposition, in particular. >> >> * Ask all the people that show compassion to the cause of a great Haskell build >> tool to unite and work together on a better Cabal. This includes the >> developers of Stack and everyone that expressed unhappiness with the current >> state of Cabal. These people should be seen as a blessing, not as an obstacle. >> * Put in place a clear process for contributing and decision making, so that it >> does not come down to the privileged opinion of one of the core developers. >> * Make a model of user experience that Cabal should conform to, and make >> conformance a priority. Surely there are among us people that know a thing or >> two about user experience — call for them to step forward. Every issue that >> stems from misunderstanding, re-assign to the model instead of closing. >> * Merge the support of Stackage snapshots into Cabal. Ask the core developers of >> Stack to join the effort. Transition from Stack to Cabal should be one well >> discoverable command that just works. >> >> I realize that this letter is largely an opinion piece. You can also see it as >> an _«ideal piece»_. Without an ideal, without a vision, we are stuck with the >> present. I do not insist that my vision is the best. But the present reality is >> not the best vision either. I propose, foremost, that we work and fight for a >> better future. >> >> [1]: https://github.com/commercialhaskell/stackage/issues/4472 >> [2]: https://github.com/tomjaguarpaw/tilapia/issues?q=is%3Aissue+is%3Aopen+cabal >> _______________________________________________ >> Haskell-Cafe mailing list >> To (un)subscribe, modify options or view archives go to: >> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe >> Only members subscribed via the mailman list are allowed to post. > _______________________________________________ > hf-discuss mailing list > hf-discuss at haskell.org > https://mail.haskell.org/cgi-bin/mailman/listinfo/hf-discuss -------------- next part -------------- An HTML attachment was scrubbed... URL: From jack at jackkelly.name Thu Dec 10 21:07:00 2020 From: jack at jackkelly.name (jack at jackkelly.name) Date: Thu, 10 Dec 2020 21:07:00 GMT Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: References: <20201210131644.GC902@extensa> Message-ID: <7edeb28fe01dd8ab6589fbaaec043ce4@jackkelly.name> Both tools have deficiencies, but looking at the "10 year overnight success" that is the recent step-change in the quality of Haskell's Language Server Protocol support, I am hopeful for the future. The answer is not as simple as "just use stack" or "just use cabal-install". I do not want to kick off a build-tool flamewar, but neither cabal-install nor stack are magical Christmas lands where everything is perfect. Here are a collection of objections to/my frustrations with stack, which is why "just use stack" isn't an answer to the problem: - Can't do GHCjs - Seems to like mass-rebuilding my work projects if I breathe on them the wrong way - Has its own way of doing everything that's slightly different (different command set, different ways of specifying build targets) - Fails to give me a REPL if it can't load all of a target's files first (I'm not sure exactly what's going on here, but when using dante, stack will blow up if the project contains a type error somewhere. Which is unhelpful when trying to get interactive editor support to resolve said type errors! Dante driving cabal does not have this problem. Extremely frustrating.) - Haskell programmers tend to end up coding to the lowest common subset of features across build tools. This held back adoption of backpack, which is sad. - hpack-by-default pushes another reinvention of basic haskell tooling, and does so with YAML, which is a file format that gets worse the more you understand it. (I expect its defenders will say this is just providing an option, but from my experience onboarding new Hackage uploaders, many people do not realise that hpack is optional.) - Many stack projects do not provide bounds on dependencies, relying on getting exact versions from LTS. This may be defensible for applications that sit at the leaves of a dependency graph, but less so for libraries. Accurate bound information is one of the reasons LTS build plans can be easily constructed, and tooling that encourages sloppy bounds feels to me like it encourages taking without giving back to the shared resource (the common set of libraries on Hackage with well-understood bounds). - What is casa.fpcomplete.com, and why was its downtime causing CI failures in my projects? What does stack talk to that domain about? HTH, -- Jack December 11, 2020 12:17 AM, "J Ho via hf-discuss" wrote: > What's wrong with Stack though? Works like a charm in all our projects, and with Nix integration > takes care of the external c-libs etc dependencies quite nicely. > > On Thu, Dec 10, 2020 at 3:07 PM Ignat Insarov wrote: > >> Thanks Francesco. I have also been using Cabal since a long time ago. >> There is no question that some great things get done in Cabal. Mostly, >> Cabal does what it says on the box, and this is why I propose to >> improve it and not, say, move to Stack. But you may see that many >> people prefer the latter — this seems even more weird since, as you >> illuminate, Cabal can already interoperate with Stackage, so it is >> strictly more featureful. _(As far as I follow, Stack still has poor >> support for Backpack and sub-package build targets.)_ >> >> However, even in the light of the links you provide, we still cannot >> say that Cabal supports Stackage. You say: >> >>>> There is no reason for two build tools to exist. The killer feature of Stack — >>>> snapshots — should be supported by Cabal. >>> >>> As far as I know, this is already possible today! [1] >>> >>> [1] https://github.com/fpco/stackage-server/issues/232 >>> see also https://github.com/erikd/jenga/ >>> https://hackage.haskell.org/package/stack2cabal >> >> Heading to that link, the closing message says: >> >>> I've added a warning about the lack of support for revisions in cabal.config in f9632d7. Closing. >> >> So, something is not working. Reading in more detail, there is >> evidently a disagreement between the core developers of Cabal and >> Stack. And as I understand, it has not been addressed ever since! This >> is exactly an example of the kind of communication problems that I >> alluded to in my first letter. Also, as far as I can see, there has >> been zero effort from the Cabal team to integrate these other tools >> that you point to. >> _______________________________________________ >> Haskell-Cafe mailing list >> To (un)subscribe, modify options or view archives go to: >> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe >> Only members subscribed via the mailman list are allowed to post. From compl.yue at icloud.com Fri Dec 11 08:15:15 2020 From: compl.yue at icloud.com (YueCompl) Date: Fri, 11 Dec 2020 16:15:15 +0800 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: <7edeb28fe01dd8ab6589fbaaec043ce4@jackkelly.name> References: <20201210131644.GC902@extensa> <7edeb28fe01dd8ab6589fbaaec043ce4@jackkelly.name> Message-ID: <887B1DEB-2611-4C3D-A0B1-AC93840B64DD@icloud.com> Just my 2 cents of thoughts, no tool can be perfect, as human individuals. If the Haskell ecosystem can be considered a public asset of all users, contributors, it is not wise for us as the stakeholders to be adverse of competition. Just imagine the government allowing a single military contractor to monopolize a whole category of weapons, what would come after? Innovation and advancing comes after competition, why shouldn't we embrace that wrt the tooling of Haskell? Duplication in efforts is a relative smaller problem IMHO. Sincerely, Compl > On 2020-12-11, at 05:07, Jack Kelly via Haskell-Cafe wrote: > > > Both tools have deficiencies, but looking at the "10 year overnight success" that is the recent step-change in the quality of Haskell's Language Server Protocol support, I am hopeful for the future. The answer is not as simple as "just use stack" or "just use cabal-install". I do not want to kick off a build-tool flamewar, but neither cabal-install nor stack are magical Christmas lands where everything is perfect. Here are a collection of objections to/my frustrations with stack, which is why "just use stack" isn't an answer to the problem: > > - Can't do GHCjs > - Seems to like mass-rebuilding my work projects if I breathe on them the wrong way > - Has its own way of doing everything that's slightly different (different command set, different ways of specifying build targets) > - Fails to give me a REPL if it can't load all of a target's files first (I'm not sure exactly what's going on here, but when using dante, stack will blow up if the project contains a type error somewhere. Which is unhelpful when trying to get interactive editor support to resolve said type errors! Dante driving cabal does not have this problem. Extremely frustrating.) > - Haskell programmers tend to end up coding to the lowest common subset of features across build tools. This held back adoption of backpack, which is sad. > - hpack-by-default pushes another reinvention of basic haskell tooling, and does so with YAML, which is a file format that gets worse the more you understand it. (I expect its defenders will say this is just providing an option, but from my experience onboarding new Hackage uploaders, many people do not realise that hpack is optional.) > - Many stack projects do not provide bounds on dependencies, relying on getting exact versions from LTS. This may be defensible for applications that sit at the leaves of a dependency graph, but less so for libraries. Accurate bound information is one of the reasons LTS build plans can be easily constructed, and tooling that encourages sloppy bounds feels to me like it encourages taking without giving back to the shared resource (the common set of libraries on Hackage with well-understood bounds). > - What is casa.fpcomplete.com, and why was its downtime causing CI failures in my projects? What does stack talk to that domain about? > > HTH, > > -- Jack > > December 11, 2020 12:17 AM, "J Ho via hf-discuss" wrote: > >> What's wrong with Stack though? Works like a charm in all our projects, and with Nix integration >> takes care of the external c-libs etc dependencies quite nicely. >> >> On Thu, Dec 10, 2020 at 3:07 PM Ignat Insarov wrote: >> >>> Thanks Francesco. I have also been using Cabal since a long time ago. >>> There is no question that some great things get done in Cabal. Mostly, >>> Cabal does what it says on the box, and this is why I propose to >>> improve it and not, say, move to Stack. But you may see that many >>> people prefer the latter — this seems even more weird since, as you >>> illuminate, Cabal can already interoperate with Stackage, so it is >>> strictly more featureful. _(As far as I follow, Stack still has poor >>> support for Backpack and sub-package build targets.)_ >>> >>> However, even in the light of the links you provide, we still cannot >>> say that Cabal supports Stackage. You say: >>> >>>>> There is no reason for two build tools to exist. The killer feature of Stack — >>>>> snapshots — should be supported by Cabal. >>>> >>>> As far as I know, this is already possible today! [1] >>>> >>>> [1] https://github.com/fpco/stackage-server/issues/232 >>>> see also https://github.com/erikd/jenga/ >>>> https://hackage.haskell.org/package/stack2cabal >>> >>> Heading to that link, the closing message says: >>> >>>> I've added a warning about the lack of support for revisions in cabal.config in f9632d7. Closing. >>> >>> So, something is not working. Reading in more detail, there is >>> evidently a disagreement between the core developers of Cabal and >>> Stack. And as I understand, it has not been addressed ever since! This >>> is exactly an example of the kind of communication problems that I >>> alluded to in my first letter. Also, as far as I can see, there has >>> been zero effort from the Cabal team to integrate these other tools >>> that you point to. >>> _______________________________________________ >>> Haskell-Cafe mailing list >>> To (un)subscribe, modify options or view archives go to: >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe >>> Only members subscribed via the mailman list are allowed to post. > _______________________________________________ > Haskell-Cafe mailing list > To (un)subscribe, modify options or view archives go to: > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe > Only members subscribed via the mailman list are allowed to post. From agocorona at gmail.com Fri Dec 11 10:35:37 2020 From: agocorona at gmail.com (Alberto G. Corona) Date: Fri, 11 Dec 2020 11:35:37 +0100 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: References: Message-ID: I played some time ago with a "brute force" building tool which starts only from the includes of the main source file. It tried to find the packages for these modules using the google search service to search in Hackage, download the package sources from Hackage and added the packages as options to the ghc -ipackage1 ipackage2 command line, recursively. If some error happened I tried with the files of an older version for the package that produced the error, by parsing the GHC errors. It failed at some C import libraries but at this moment it can be switched to build in cabal or stack mode for that package/module. I write this just in case this gives some ideas to someone to go along these lines. Much of that is what Cabal does anyway, but constrained by the limits imposed by the *.cabal files in the packages. But the machinery is there Perhaps Cabal could have a --bruteforce option? El jue, 10 dic 2020 a las 12:25, Ignat Insarov () escribió: > # Do something about Cabal? > > Hello. > > Cabal is the second most used tool in Haskell after GHC. It has many > problems. It may be noticed that there is one and a half developers > working on > it. This is clearly not enough to address these problems. I propose that > this is > a good place to invest in. > > ### Problems I have in mind: > > * Poor communication, lack of open source development process. > > The whole Cabal–Stack schism appears to be an outcome of poor > communication. One of the leading developers of Cabal is even banned from > participation somewhere in Stack circles.[1] Personally, I reported > several > issues to Cabal and every single time it resulted in sadness. Observe a > vicious circle: core developers are overworked ⇒ they are being > unfriendly ⇒ > there are fewer contributors ⇒ core developers are overworked. > > I have no hard evidence but it appears that presently, more people that > strive > to improve the Haskell build experience are outside the Cabal cabal than > are > inside. > > * User experience is an afterthought. > > Cabal's user experience is horrifying. A collection of complaints is > being > compiled elsewhere.[2] There are also bugs being opened to Cabal because > of > this, requiring triage and therefore wasting the precious time of the few > overworked developers. Stack is much more friendly — this shows by > example > that the user experience problem is not inherent and may be solved. > > It is ordinary to receive output like this: > > ``` > % cabal run example-executable > Warning: The package list for 'hackage.haskell.org' is 84 days old. > Run 'cabal update' to get the latest list of available packages. > Resolving dependencies... > cabal: Could not resolve dependencies: > [__0] trying: example-0.1.0.6 (user goal) > [__1] next goal: opaleye (dependency of example) > [__1] rejecting: opaleye-0.7.1.0, opaleye-0.7.0.0 (constraint from > project > config TODO requires ==0.6.7006.1) > [__1] rejecting: opaleye-0.6.7006.1 (conflict: example => opaleye^>=0.7) > [__1] skipping: opaleye-0.6.7006.0, opaleye-0.6.7005.0, > opaleye-0.6.7004.2, > opaleye-0.6.7004.1, opaleye-0.6.7004.0, opaleye-0.6.7003.1, > opaleye-0.6.7003.0, opaleye-0.6.1.0, opaleye-0.6.0.0, opaleye-0.5.4.0, > opaleye-0.5.3.1, opaleye-0.5.3.0, opaleye-0.5.2.2, opaleye-0.5.2.0, > opaleye-0.5.1.1, opaleye-0.5.1.0, opaleye-0.5.0.0, opaleye-0.4.2.0, > opaleye-0.4.1.0, opaleye-0.4.0.0, opaleye-0.3.1.2, opaleye-0.3.1, > opaleye-0.3, > opaleye-0.2, opaleye-0.6.7002.0, opaleye-0.6.7001.0, opaleye-0.6.7000.0, > opaleye-0.5.2.1, opaleye-0.3.1.1 (has the same characteristics that > caused the > previous version to fail: excluded by constraint '^>=0.7' from example) > [__1] fail (backjumping, conflict set: example, opaleye) > After searching the rest of the dependency tree exhaustively, these were > the > goals I've had most trouble fulfilling: opaleye, example > ``` > > There are so many things that are wrong here. Even a sneaky _«to do»_ > remark. If you wonder, in this case the solution is to remove and > re-generate > `cabal.project.freeze`. > > Even the name of the program — it is actually _«cabal-install»_ — is > incomprehensible, it should be re-branded to Cabal, which is how everyone > calls it anyway. > > * Features are not being introduced. > > There is no reason for two build tools to exist. The killer feature of > Stack — > snapshots — should be supported by Cabal. Possibly Cabal itself should be > refactored and split so that there are separate tools for packaging, > version > resolution and human interaction — I do not know. But certainly the way > things > are presently is a waste of developer effort and a source of confusion > for > everyone. > > ### My proposition, in particular. > > * Ask all the people that show compassion to the cause of a great Haskell > build > tool to unite and work together on a better Cabal. This includes the > developers of Stack and everyone that expressed unhappiness with the > current > state of Cabal. These people should be seen as a blessing, not as an > obstacle. > * Put in place a clear process for contributing and decision making, so > that it > does not come down to the privileged opinion of one of the core > developers. > * Make a model of user experience that Cabal should conform to, and make > conformance a priority. Surely there are among us people that know a > thing or > two about user experience — call for them to step forward. Every issue > that > stems from misunderstanding, re-assign to the model instead of closing. > * Merge the support of Stackage snapshots into Cabal. Ask the core > developers of > Stack to join the effort. Transition from Stack to Cabal should be one > well > discoverable command that just works. > > I realize that this letter is largely an opinion piece. You can also see > it as > an _«ideal piece»_. Without an ideal, without a vision, we are stuck with > the > present. I do not insist that my vision is the best. But the present > reality is > not the best vision either. I propose, foremost, that we work and fight > for a > better future. > > [1]: https://github.com/commercialhaskell/stackage/issues/4472 > [2]: > https://github.com/tomjaguarpaw/tilapia/issues?q=is%3Aissue+is%3Aopen+cabal > _______________________________________________ > Haskell-Cafe mailing list > To (un)subscribe, modify options or view archives go to: > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe > Only members subscribed via the mailman list are allowed to post. -- Alberto. -------------- next part -------------- An HTML attachment was scrubbed... URL: From immanuel.litzroth at gmail.com Fri Dec 11 09:31:23 2020 From: immanuel.litzroth at gmail.com (Immanuel Litzroth) Date: Fri, 11 Dec 2020 10:31:23 +0100 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: <887B1DEB-2611-4C3D-A0B1-AC93840B64DD@icloud.com> References: <20201210131644.GC902@extensa> <7edeb28fe01dd8ab6589fbaaec043ce4@jackkelly.name> <887B1DEB-2611-4C3D-A0B1-AC93840B64DD@icloud.com> Message-ID: I found the whole cabal experience confusing and not well documented. I kept finding blogs online that were not working anymore in my version of cabal ('cabal sandbox init', 'cabal init --sandbox'...) when looking for advice. I still don't understand the whole v1-build, v2-build, new-build and build... The manual doesn't seem to have a decent conceptual overview of what the tool should do (e.g. an explanation of what sandboxing is supposed to achieve, or the 4 build command versions). Several of the links on this page https://www.haskell.org/cabal/ are dead https://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/ or refer to old versions: https://wiki.haskell.org/Upgrading_packages This should not be construed as a critique of what has been achieved, but as honest feedback of my experience. > Innovation and advancing comes after competition, why shouldn't we embrace that wrt the tooling of Haskell? Duplication in efforts is a relative smaller problem IMHO. Well the competition has "go build" and cargo... And duplication of effort is a problem when there's not enough resources for even one decent build tool Immanuel From trebla at vex.net Fri Dec 11 18:37:56 2020 From: trebla at vex.net (Albert Y. C. Lai) Date: Fri, 11 Dec 2020 13:37:56 -0500 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: References: <20201210131644.GC902@extensa> <7edeb28fe01dd8ab6589fbaaec043ce4@jackkelly.name> <887B1DEB-2611-4C3D-A0B1-AC93840B64DD@icloud.com> Message-ID: <9bedfabc-5e4e-f514-696e-8e76ec063827@vex.net> The correct URL to the up-to-date cabal user guide, since a couple of years ago or more, is: cabal.readthedocs.io In principle, someone could and should make a copy at www.haskell.org/cabal, but I don't know why it hasn't happened. Would be nice. cabal sandboxing is being phased out. Every blog on cabal sandboxing is out of date by definition. Don't bother. If your version of cabal-install is >= 3.0, when you issue "build" "run" etc they already mean v2-build, v2-run, etc. I refer you to the correct up-to-date cabal user guide, chapter 5 "nix-style local builds", for its model. I would not recommend spending time on the v1 model, unless you're a historian. "new-" was a transitional alias to "v2-" during a past transitional period that can be safely ignored (unless you're a historian). (Historians will remind me that the plan was, one day in the future, when the cabal devs introduce a 3rd model, the "new-" prefix will be revived again, this time aliasing to the 3rd model. I say that people are so happy with the current 2nd model that it won't happen.) On 2020-12-11 4:31 a.m., Immanuel Litzroth wrote: > I found the whole cabal experience confusing and not well documented. > I kept finding blogs online > that were not working anymore in my version of cabal ('cabal sandbox > init', 'cabal init --sandbox'...) when looking > for advice. I still don't understand the whole v1-build, v2-build, > new-build and build... > The manual doesn't seem to have a decent conceptual overview of what > the tool should do (e.g. an explanation > of what sandboxing is supposed to achieve, or the 4 build command versions). > Several of the links on this page https://www.haskell.org/cabal/ are dead > https://www.haskell.org/cabal/release/cabal-latest/doc/API/Cabal/ > or refer to old versions: > https://wiki.haskell.org/Upgrading_packages > > This should not be construed as a critique of what has been achieved, > but as honest feedback > of my experience. >> Innovation and advancing comes after competition, why shouldn't we embrace that wrt the tooling of Haskell? Duplication in efforts is a relative smaller problem IMHO. > Well the competition has "go build" and cargo... > And duplication of effort is a problem when there's not enough > resources for even one decent build tool > Immanuel > _______________________________________________ > Haskell-Cafe mailing list > To (un)subscribe, modify options or view archives go to: > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe > Only members subscribed via the mailman list are allowed to post. > From jack at jackkelly.name Wed Dec 16 12:18:11 2020 From: jack at jackkelly.name (jack at jackkelly.name) Date: Wed, 16 Dec 2020 12:18:11 GMT Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? In-Reply-To: <9bedfabc-5e4e-f514-696e-8e76ec063827@vex.net> References: <9bedfabc-5e4e-f514-696e-8e76ec063827@vex.net> <20201210131644.GC902@extensa> <7edeb28fe01dd8ab6589fbaaec043ce4@jackkelly.name> <887B1DEB-2611-4C3D-A0B1-AC93840B64DD@icloud.com> Message-ID: <56ab1b1511f7d21657835f475f05501c@jackkelly.name> December 12, 2020 4:37 AM, "Albert Y. C. Lai" wrote: (Re: cabal-install commands) > I would not recommend spending time on the v1 model, unless you're a > historian. There is one edge case that I think still works better under cabal v1- commands: https://github.com/haskell/cabal/issues/6515 This is where you create a shared, read-only set of packages (e.g., in a computer lab image) so that students don't fill their $HOME with compiled packages. Other than that, the v2-commands are a major step forward. -- Jack From john.ericson at obsidian.systems Wed Dec 23 22:06:09 2020 From: john.ericson at obsidian.systems (John Ericson) Date: Wed, 23 Dec 2020 17:06:09 -0500 Subject: [HF-discuss] [Haskell-cafe] Do something about Cabal? Not yet! In-Reply-To: <010f01764e341294-7a0a53b6-ee76-4330-979c-a0dad7a7c113-000000@us-east-2.amazonses.com> References: <67B43049-BDF9-4F4F-8C76-E484D8C8CFDF@disroot.org> <010f01764e341294-7a0a53b6-ee76-4330-979c-a0dad7a7c113-000000@us-east-2.amazonses.com> Message-ID: <96a743a0-4f08-a3e1-8ee7-ac65733f4e21@obsidian.systems> I agree with Richard, but would like to caution that doing something about our build tools is, while very important, also very risky, if history is to serve as a lesson. I think I would prefer to see the Haskell Foundation "warm up" on some easier battles to build consensus and gain momentum before wading into these treacherous waters. John On 12/10/20 2:50 PM, Richard Eisenberg via hf-discuss wrote: > In my view, a lack of communication like the one highlighted here is > exactly what the Haskell Foundation hopes to improve. It's still being > bootstrapped, so don't expect any action soon, but I would hope for > forward motion by the springtime. > > Of course, the HF needs all of us to be the best foundation it can -- > so please consider nominating yourself for a board position > (https://haskell.foundation/board-nominations/ > ) and/or applying for > the executive director (full-time, salaried) position > (https://haskell.foundation/ed-job-description/ > )! In either role, you > could have direct impact on moving this all forward. > > Richard > >> On Dec 10, 2020, at 6:42 AM, Allen Sobot via hf-discuss >> > wrote: >> >> As a still (very) new Haskell user by many measures, indeed the >> little experience I had with Cabal isn't great overall in my view >> (honestly not a fan of Stack grabbing separate GHC instances though >> either unless I pass like 2 command-line flags, if there's a >> configuration option I'm not aware of I'd be grateful). >> >> I had no clue about the communication issues etc. plaguing Cabal, >> that explains a bit... >> >> In any case I'd like to try to contribute what I can to this effort, >> mainly to improve the UX which I agree is absolutely terrible in my >> humble opinion. >> >> (Side note: I was informed on another mailing list that I may have >> some setting pertaining to forcing some kind of read receipt which is >> considered impolite on mailing lists, if this is still the case I >> apologize and I'm trying to determine what even is the precise issue >> or setting controlling it, at least on K-9 Mail and Neomutt) >> >> On December 10, 2020 12:23:42 p.m. GMT+01:00, Ignat Insarov >> > wrote: >>> # Do something about Cabal? >>> >>> Hello. >>> >>> Cabal is the second most used tool in Haskell after GHC. It has many >>> problems. It may be noticed that there is one and a half developers >>> working on >>> it. This is clearly not enough to address these problems. I propose >>> that this is >>> a good place to invest in. >>> >>> ### Problems I have in mind: >>> >>> * Poor communication, lack of open source development process. >>> >>> The whole Cabal–Stack schism appears to be an outcome of poor >>> communication. One of the leading developers of Cabal is even banned >>> from >>> participation somewhere in Stack circles.[1] Personally, I reported >>> several >>> issues to Cabal and every single time it resulted in sadness. Observe a >>> vicious circle: core developers are overworked ⇒ they are being >>> unfriendly ⇒ >>> there are fewer contributors ⇒ core developers are overworked. >>> >>> I have no hard evidence but it appears that presently, more people >>> that strive >>> to improve the Haskell build experience are outside the Cabal cabal >>> than are >>> inside. >>> >>> * User experience is an afterthought. >>> >>> Cabal's user experience is horrifying. A collection of complaints is >>> being >>> compiled elsewhere.[2] There are also bugs being opened to Cabal >>> because of >>> this, requiring triage and therefore wasting the precious time of >>> the few >>> overworked developers. Stack is much more friendly — this shows by >>> example >>> that the user experience problem is not inherent and may be solved. >>> >>> It is ordinary to receive output like this: >>> >>> ``` >>> % cabal run example-executable >>> Warning: The package list for 'hackage.haskell.org >>> ' is 84 days old. >>> Run 'cabal update' to get the latest list of available packages. >>> Resolving dependencies... >>> cabal: Could not resolve dependencies: >>> [__0] trying: example-0.1.0.6 (user goal) >>> [__1] next goal: opaleye (dependency of example) >>> [__1] rejecting: opaleye-0.7.1.0, opaleye-0.7.0.0 (constraint from >>> project >>> config TODO requires ==0.6.7006.1) >>> [__1] rejecting: opaleye-0.6.7006.1 (conflict: example => opaleye^>=0.7) >>> [__1] skipping: opaleye-0.6.7006.0, opaleye-0.6.7005.0, >>> opaleye-0.6.7004.2, >>> opaleye-0.6.7004.1, opaleye-0.6.7004.0, opaleye-0.6.7003.1, >>> opaleye-0.6.7003.0, opaleye-0.6.1.0, opaleye-0.6.0.0, opaleye-0.5.4.0, >>> opaleye-0.5.3.1, opaleye-0.5.3.0, opaleye-0.5.2.2, opaleye-0.5.2.0, >>> opaleye-0.5.1.1, opaleye-0.5.1.0, opaleye-0.5.0.0, opaleye-0.4.2.0, >>> opaleye-0.4.1.0, opaleye-0.4.0.0, opaleye-0.3.1.2, opaleye-0.3.1, >>> opaleye-0.3, >>> opaleye-0.2, opaleye-0.6.7002.0, opaleye-0.6.7001.0, opaleye-0.6.7000.0, >>> opaleye-0.5.2.1, opaleye-0.3.1.1 (has the same characteristics that >>> caused the >>> previous version to fail: excluded by constraint '^>=0.7' from example) >>> [__1] fail (backjumping, conflict set: example, opaleye) >>> After searching the rest of the dependency tree exhaustively, these >>> were the >>> goals I've had most trouble fulfilling: opaleye, example >>> ``` >>> >>> There are so many things that are wrong here. Even a sneaky _«to do»_ >>> remark. If you wonder, in this case the solution is to remove and >>> re-generate >>> `cabal.project.freeze`. >>> >>> Even the name of the program — it is actually _«cabal-install»_ — is >>> incomprehensible, it should be re-branded to Cabal, which is how >>> everyone >>> calls it anyway. >>> >>> * Features are not being introduced. >>> >>> There is no reason for two build tools to exist. The killer feature >>> of Stack — >>> snapshots — should be supported by Cabal. Possibly Cabal itself >>> should be >>> refactored and split so that there are separate tools for packaging, >>> version >>> resolution and human interaction — I do not know. But certainly the >>> way things >>> are presently is a waste of developer effort and a source of >>> confusion for >>> everyone. >>> >>> ### My proposition, in particular. >>> >>> * Ask all the people that show compassion to the cause of a great >>> Haskell build >>> tool to unite and work together on a better Cabal. This includes the >>> developers of Stack and everyone that expressed unhappiness with the >>> current >>> state of Cabal. These people should be seen as a blessing, not as an >>> obstacle. >>> * Put in place a clear process for contributing and decision making, >>> so that it >>> does not come down to the privileged opinion of one of the core >>> developers. >>> * Make a model of user experience that Cabal should conform to, and make >>> conformance a priority. Surely there are among us people that know a >>> thing or >>> two about user experience — call for them to step forward. Every >>> issue that >>> stems from misunderstanding, re-assign to the model instead of closing. >>> * Merge the support of Stackage snapshots into Cabal. Ask the core >>> developers of >>> Stack to join the effort. Transition from Stack to Cabal should be >>> one well >>> discoverable command that just works. >>> >>> I realize that this letter is largely an opinion piece. You can also >>> see it as >>> an _«ideal piece»_. Without an ideal, without a vision, we are stuck >>> with the >>> present. I do not insist that my vision is the best. But the present >>> reality is >>> not the best vision either. I propose, foremost, that we work and >>> fight for a >>> better future. >>> >>> [1]: https://github.com/commercialhaskell/stackage/issues/4472 >>> >>> [2]: >>> https://github.com/tomjaguarpaw/tilapia/issues?q=is%3Aissue+is%3Aopen+cabal >>> >>> _______________________________________________ >>> Haskell-Cafe mailing list >>> To (un)subscribe, modify options or view archives go to: >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe >>> >>> Only members subscribed via the mailman list are allowed to post. >> _______________________________________________ >> hf-discuss mailing list >> hf-discuss at haskell.org >> https://mail.haskell.org/cgi-bin/mailman/listinfo/hf-discuss >> > > > _______________________________________________ > hf-discuss mailing list > hf-discuss at haskell.org > https://mail.haskell.org/cgi-bin/mailman/listinfo/hf-discuss -------------- next part -------------- An HTML attachment was scrubbed... URL: