<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>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.</p>
    <p>John<br>
    </p>
    <div class="moz-cite-prefix">On 12/10/20 2:50 PM, Richard Eisenberg
      via hf-discuss wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:010f01764e341294-7a0a53b6-ee76-4330-979c-a0dad7a7c113-000000@us-east-2.amazonses.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      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.
      <div class=""><br class="">
      </div>
      <div class="">Of course, the HF needs all of us to be the best
        foundation it can -- so please consider nominating yourself for
        a board position (<a
          href="https://haskell.foundation/board-nominations/" class=""
          moz-do-not-send="true">https://haskell.foundation/board-nominations/</a>)
        and/or applying for the executive director (full-time, salaried)
        position (<a
          href="https://haskell.foundation/ed-job-description/" class=""
          moz-do-not-send="true">https://haskell.foundation/ed-job-description/</a>)!
        In either role, you could have direct impact on moving this all
        forward.</div>
      <div class=""><br class="">
      </div>
      <div class="">Richard<br class="">
        <div><br class="">
          <blockquote type="cite" class="">
            <div class="">On Dec 10, 2020, at 6:42 AM, Allen Sobot via
              hf-discuss <<a href="mailto:hf-discuss@haskell.org"
                class="" moz-do-not-send="true">hf-discuss@haskell.org</a>>
              wrote:</div>
            <br class="Apple-interchange-newline">
            <div class=""><span style="caret-color: rgb(0, 0, 0);
                font-family: Menlo-Regular; font-size: 11px; font-style:
                normal; font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">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).</span><br style="caret-color: rgb(0, 0, 0);
                font-family: Menlo-Regular; font-size: 11px; font-style:
                normal; font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <br style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <span style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">I had no clue about the
                communication issues etc. plaguing Cabal, that explains
                a bit...</span><br style="caret-color: rgb(0, 0, 0);
                font-family: Menlo-Regular; font-size: 11px; font-style:
                normal; font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <br style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <span style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">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.</span><br style="caret-color: rgb(0, 0, 0);
                font-family: Menlo-Regular; font-size: 11px; font-style:
                normal; font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <br style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <span style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">(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)</span><br
                style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <br style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <span style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">On December 10, 2020 12:23:42 p.m.
                GMT+01:00, Ignat Insarov <</span><a
                href="mailto:kindaro@gmail.com" style="font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; orphans: auto; text-align:
                start; text-indent: 0px; text-transform: none;
                white-space: normal; widows: auto; word-spacing: 0px;
                -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""
                moz-do-not-send="true">kindaro@gmail.com</a><span
                style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">> wrote:</span><br
                style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <blockquote type="cite" style="font-family: Menlo-Regular;
                font-size: 11px; font-style: normal; font-variant-caps:
                normal; font-weight: normal; letter-spacing: normal;
                orphans: auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px; text-decoration: none;"
                class=""># Do something about Cabal?<br class="">
                <br class="">
                Hello.<br class="">
                <br class="">
                Cabal is the second most used tool in Haskell after
                GHC. It has many<br class="">
                problems. It may be noticed that there is one and a half
                developers working on<br class="">
                it. This is clearly not enough to address these
                problems. I propose that this is<br class="">
                a good place to invest in.<br class="">
                <br class="">
                ### Problems I have in mind:<br class="">
                <br class="">
                * Poor communication, lack of open source development
                process.<br class="">
                <br class="">
                The whole Cabal–Stack schism appears to be an outcome of
                poor<br class="">
                communication. One of the leading developers of Cabal is
                even banned from<br class="">
                participation somewhere in Stack circles.[1] Personally,
                I reported several<br class="">
                issues to Cabal and every single time it resulted in
                sadness. Observe a<br class="">
                vicious circle: core developers are overworked ⇒ they
                are being unfriendly ⇒<br class="">
                there are fewer contributors ⇒ core developers are
                overworked.<br class="">
                <br class="">
                I have no hard evidence but it appears that presently,
                more people that strive<br class="">
                to improve the Haskell build experience are outside the
                Cabal cabal than are<br class="">
                inside.<br class="">
                <br class="">
                * User experience is an afterthought.<br class="">
                <br class="">
                Cabal's user experience is horrifying. A collection of
                complaints is being<br class="">
                compiled elsewhere.[2] There are also bugs being opened
                to Cabal because of<br class="">
                this, requiring triage and therefore wasting the
                precious time of the few<br class="">
                overworked developers. Stack is much more friendly —
                this shows by example<br class="">
                that the user experience problem is not inherent and may
                be solved.<br class="">
                <br class="">
                It is ordinary to receive output like this:<br class="">
                <br class="">
                ```<br class="">
                % cabal run example-executable<br class="">
                Warning: The package list for '<a
                  href="http://hackage.haskell.org" class=""
                  moz-do-not-send="true">hackage.haskell.org</a>' is 84
                days old.<br class="">
                Run 'cabal update' to get the latest list of available
                packages.<br class="">
                Resolving dependencies...<br class="">
                cabal: Could not resolve dependencies:<br class="">
                [__0] trying: example-0.1.0.6 (user goal)<br class="">
                [__1] next goal: opaleye (dependency of example)<br
                  class="">
                [__1] rejecting: opaleye-0.7.1.0, opaleye-0.7.0.0
                (constraint from project<br class="">
                config TODO requires ==0.6.7006.1)<br class="">
                [__1] rejecting: opaleye-0.6.7006.1 (conflict: example
                => opaleye^>=0.7)<br class="">
                [__1] skipping: opaleye-0.6.7006.0, opaleye-0.6.7005.0,
                opaleye-0.6.7004.2,<br class="">
                opaleye-0.6.7004.1, opaleye-0.6.7004.0,
                opaleye-0.6.7003.1,<br class="">
                opaleye-0.6.7003.0, opaleye-0.6.1.0, opaleye-0.6.0.0,
                opaleye-0.5.4.0,<br class="">
                opaleye-0.5.3.1, opaleye-0.5.3.0, opaleye-0.5.2.2,
                opaleye-0.5.2.0,<br class="">
                opaleye-0.5.1.1, opaleye-0.5.1.0, opaleye-0.5.0.0,
                opaleye-0.4.2.0,<br class="">
                opaleye-0.4.1.0, opaleye-0.4.0.0, opaleye-0.3.1.2,
                opaleye-0.3.1, opaleye-0.3,<br class="">
                opaleye-0.2, opaleye-0.6.7002.0, opaleye-0.6.7001.0,
                opaleye-0.6.7000.0,<br class="">
                opaleye-0.5.2.1, opaleye-0.3.1.1 (has the same
                characteristics that caused the<br class="">
                previous version to fail: excluded by constraint
                '^>=0.7' from example)<br class="">
                [__1] fail (backjumping, conflict set: example, opaleye)<br
                  class="">
                After searching the rest of the dependency tree
                exhaustively, these were the<br class="">
                goals I've had most trouble fulfilling: opaleye, example<br
                  class="">
                ```<br class="">
                <br class="">
                There are so many things that are wrong here. Even a
                sneaky _«to do»_<br class="">
                remark. If you wonder, in this case the solution is to
                remove and re-generate<br class="">
                `cabal.project.freeze`.<br class="">
                <br class="">
                Even the name of the program — it is actually
                _«cabal-install»_ — is<br class="">
                incomprehensible, it should be re-branded to Cabal,
                which is how everyone<br class="">
                calls it anyway.<br class="">
                <br class="">
                * Features are not being introduced.<br class="">
                <br class="">
                There is no reason for two build tools to exist. The
                killer feature of Stack —<br class="">
                snapshots — should be supported by Cabal. Possibly Cabal
                itself should be<br class="">
                refactored and split so that there are separate tools
                for packaging, version<br class="">
                resolution and human interaction — I do not know. But
                certainly the way things<br class="">
                are presently is a waste of developer effort and a
                source of confusion for<br class="">
                everyone.<br class="">
                <br class="">
                ### My proposition, in particular.<br class="">
                <br class="">
                * Ask all the people that show compassion to the cause
                of a great Haskell build<br class="">
                tool to unite and work together on a better Cabal. This
                includes the<br class="">
                developers of Stack and everyone that expressed
                unhappiness with the current<br class="">
                state of Cabal. These people should be seen as a
                blessing, not as an obstacle.<br class="">
                * Put in place a clear process for contributing and
                decision making, so that it<br class="">
                does not come down to the privileged opinion of one of
                the core developers.<br class="">
                * Make a model of user experience that Cabal should
                conform to, and make<br class="">
                conformance a priority. Surely there are among us people
                that know a thing or<br class="">
                two about user experience — call for them to step
                forward. Every issue that<br class="">
                stems from misunderstanding, re-assign to the model
                instead of closing.<br class="">
                * Merge the support of Stackage snapshots into
                Cabal. Ask the core developers of<br class="">
                Stack to join the effort. Transition from Stack to Cabal
                should be one well<br class="">
                discoverable command that just works.<br class="">
                <br class="">
                I realize that this letter is largely an opinion
                piece. You can also see it as<br class="">
                an _«ideal piece»_. Without an ideal, without a vision,
                we are stuck with the<br class="">
                present. I do not insist that my vision is the best. But
                the present reality is<br class="">
                not the best vision either. I propose, foremost, that we
                work and fight for a<br class="">
                better future.<br class="">
                <br class="">
                [1]: <a
                  href="https://github.com/commercialhaskell/stackage/issues/4472"
                  class="" moz-do-not-send="true">https://github.com/commercialhaskell/stackage/issues/4472</a><br
                  class="">
                [2]: <a
href="https://github.com/tomjaguarpaw/tilapia/issues?q=is%3Aissue+is%3Aopen+cabal"
                  class="" moz-do-not-send="true">https://github.com/tomjaguarpaw/tilapia/issues?q=is%3Aissue+is%3Aopen+cabal</a><br
                  class="">
                _______________________________________________<br
                  class="">
                Haskell-Cafe mailing list<br class="">
                To (un)subscribe, modify options or view archives go to:<br
                  class="">
                <a
                  href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe"
                  class="" moz-do-not-send="true">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br
                  class="">
                Only members subscribed via the mailman list are allowed
                to post.<br class="">
              </blockquote>
              <span style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">_______________________________________________</span><br
                style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <span style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">hf-discuss mailing list</span><br
                style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <a href="mailto:hf-discuss@haskell.org"
                style="font-family: Menlo-Regular; font-size: 11px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""
                moz-do-not-send="true">hf-discuss@haskell.org</a><br
                style="caret-color: rgb(0, 0, 0); font-family:
                Menlo-Regular; font-size: 11px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <a
                href="https://mail.haskell.org/cgi-bin/mailman/listinfo/hf-discuss"
                style="font-family: Menlo-Regular; font-size: 11px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""
                moz-do-not-send="true">https://mail.haskell.org/cgi-bin/mailman/listinfo/hf-discuss</a></div>
          </blockquote>
        </div>
        <br class="">
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
hf-discuss mailing list
<a class="moz-txt-link-abbreviated" href="mailto:hf-discuss@haskell.org">hf-discuss@haskell.org</a>
<a class="moz-txt-link-freetext" href="https://mail.haskell.org/cgi-bin/mailman/listinfo/hf-discuss">https://mail.haskell.org/cgi-bin/mailman/listinfo/hf-discuss</a>
</pre>
    </blockquote>
  </body>
</html>