<div dir="ltr"><div>I'm sorry, I'm not quite sure I understand your recommendation. Are you saying that I should ideally replace all usages of `License` in the Stack codebase with `Either SPDX.License License`? That _should_ be possible, the only questions I'd have are:</div><div><br></div><div>1. We additionally grab license info from the GHC package dump. Would there be any problem parsing that license field into the old License data type and storing as Right?</div><div>2. If we're going to have to treat this as arbitrary text anyway, is there any reason not to represent it as `newtype TextualLicense = TextualLicense Text` or similar, and convert immediately with `display`?<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 20, 2018 at 6:12 PM, Oleg Grenrus <span dir="ltr"><<a href="mailto:oleg.grenrus@iki.fi" target="_blank">oleg.grenrus@iki.fi</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Michael,<br>
<br>
thanks for your comments!<br>
<br>
- The allBuildInfo change is<br>
<a href="https://github.com/haskell/cabal/commit/8fc10320a5dc4898927c84ad6a2dce7965ef30db" rel="noreferrer" target="_blank">https://github.com/haskell/<wbr>cabal/commit/<wbr>8fc10320a5dc4898927c84ad6a2dce<wbr>7965ef30db</a>,<br>
I agree with Herbert on this. New `allBuildInfo` implementation is<br>
correct given the name. There was even a TODO to make that change.<br>
`reallyAllBuildInfo` would been silly. I also didn't felt ok to change<br>
the type to `Traversal` (we have lenses, please try out them too and<br>
tell if something is missing!). We'll highlight the change in the<br>
changelog, as it's easy to miss.<br>
<br>
- The lack of SPDX changelog entry is my bad. It was a series of<br>
patches, and the changelog + manual update is still not done. I try to<br>
summarise:<br>
    - `cabal-version: 2.2` files use SPDX expression syntax for<br>
`license: ` field. PackageDescription's licenseRaw will be Left expr,<br>
expr :: Distribution.SPDX.License.<wbr>License<br>
    - `cabal-version: 2.0` files still use old `License` syntax and<br>
type, licenseRaw is `Right l`, l :: Distribution.License.License<br>
    - I recommend treating the field as opaque. You can `either display<br>
display` to show it<br>
       - Next best choice is to use `SPDX.License` as in that direction<br>
conversion is lossless (licenseToSPDX), but have to workaround lack of<br>
e.g. `OtherLicense` as a concept (IIRC it's converted to<br>
LicenseRef:OtherLicense which is valid SPDX-License-Id). This might be<br>
necessary if you plan to read (human readable) text back.<br>
<span class="HOEnZb"><font color="#888888"><br>
Oleg<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On 20.02.2018 15:47, Michael Snoyman wrote:<br>
> Hi all,<br>
><br>
> Oleg mentioned to me on Reddit that a 2.2 branch has been cut for<br>
> Cabal, and recommended we try to upgrade Stack to it. I'm sharing<br>
> information here on that process in case it's useful to others, either<br>
> as feedback on the API changes, or help for others going through<br>
> similar upgrades. If anyone would rather that I do or do not post such<br>
> reports in the future, let me know.<br>
><br>
> I've opened a PR for this change[1], which currently is a single<br>
> commit[2]. As you can see from the change to stack.yaml[3], I needed<br>
> to refer to the commit of Cabal in question, and turn on `allow-newer`<br>
> for some packages (cabal-doctest and http-api-data) with restrictive<br>
> upper bounds on Cabal. Both of these packages compiled without issue.<br>
><br>
> No change was necessary to Stack's Setup.hs file.<br>
><br>
> Most of the changes so far were compile-time errors, which is a Good<br>
> Thing. Changes I had to make:<br>
><br>
> * The build type is no longer a Maybe field. (As a user: this is a<br>
> nice change, no longer a need to guess about what a Nothing value means.)<br>
> * There are now two License types, the original one and the SPDX<br>
> variant. I don't understand what this change is about, some further<br>
> explanation in the docs or the ChangeLog would definitely be<br>
> appreciated. But hacking my way through the types seems to have worked.<br>
> * Parsing a package description now works on a ByteString instead of a<br>
> String. This allowed me to remove some UTF8 conversion and<br>
> BOM-stripping code, which is very nice.<br>
> * The new parsing API exposes the cabal file version when that<br>
> prevented the parse (at least, that's my understanding). The changes<br>
> to accommodate the new API were relatively trivial, so another +1 here.<br>
> * Also: getting file position information for warnings and errors is<br>
> _very_ nice. +1<br>
><br>
> I haven't done extensive testing yet, but I've so far only found one<br>
> bug due to runtime changes: the behavior of allBuildInfo has changed<br>
> to now include non-buildable components. This resulted in some<br>
> confusion until I reviewed the changelog more closely. If I could make<br>
> a request, it would be that, in the future, new runtime behavior come<br>
> with a new function name, to convert runtime errors into compile time<br>
> errors. This was _not_ a particularly difficult issue to work around<br>
> though, in large part thanks to the changelog.<br>
><br>
> I'll continue testing this branch of Stack. Our plans are to merge<br>
> this to master, and release Stack 1.7.0 close to the Cabal 2.2 release<br>
> date.<br>
><br>
> Michael<br>
><br>
> [1] <a href="https://github.com/commercialhaskell/stack/pull/3878/files" rel="noreferrer" target="_blank">https://github.com/<wbr>commercialhaskell/stack/pull/<wbr>3878/files</a><br>
> [2]<br>
> <a href="https://github.com/commercialhaskell/stack/pull/3878/commits/a101341d04213d6dd8e0cf16d2f2fef8e7ed5cd5" rel="noreferrer" target="_blank">https://github.com/<wbr>commercialhaskell/stack/pull/<wbr>3878/commits/<wbr>a101341d04213d6dd8e0cf16d2f2fe<wbr>f8e7ed5cd5</a><br>
> [3]<br>
> <a href="https://github.com/commercialhaskell/stack/pull/3878/commits/a101341d04213d6dd8e0cf16d2f2fef8e7ed5cd5#diff-fafd0cdcd559a7b124cc61c29413fb54" rel="noreferrer" target="_blank">https://github.com/<wbr>commercialhaskell/stack/pull/<wbr>3878/commits/<wbr>a101341d04213d6dd8e0cf16d2f2fe<wbr>f8e7ed5cd5#diff-<wbr>fafd0cdcd559a7b124cc61c29413fb<wbr>54</a><br>
><br>
><br>
</div></div><div class="HOEnZb"><div class="h5">> ______________________________<wbr>_________________<br>
> cabal-devel mailing list<br>
> <a href="mailto:cabal-devel@haskell.org">cabal-devel@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/cabal-devel" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/cabal-<wbr>devel</a><br>
<br>
<br>
</div></div><br>______________________________<wbr>_________________<br>
cabal-devel mailing list<br>
<a href="mailto:cabal-devel@haskell.org">cabal-devel@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/cabal-devel" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/cabal-<wbr>devel</a><br>
<br></blockquote></div><br></div>