<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en">
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>
<style>img {
max-width: 100%; height: auto;
}
body {
font-size: 0.875rem;
}
body {
-webkit-text-shadow: rgba(255,255,255,0.01) 0 0 1px;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: inherit;
}
</style>
</head>
<body style='font-size: inherit; -webkit-text-shadow: rgba(255,255,255,0.01) 0 0 1px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";'>
<div class="content">
<h3 style="margin-top: 20px; margin-bottom: 10px;">
Marge Bot pushed to branch wip/marge_bot_batch_merge_job
at <a href="https://gitlab.haskell.org/ghc/ghc" style="color: #1068bf; text-decoration: none;">Glasgow Haskell Compiler / GHC</a>
</h3>
<h4 style="margin-top: 10px; margin-bottom: 10px;">
Commits:
</h4>
<ul>
<li>
<strong style="font-weight: bold;"><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/4b5a4e99ae5daacc631ca19c7266e1c8ef59a20b" style="color: #1068bf; text-decoration: none;">4b5a4e99</a></strong>
<div>
<span>by John Ericson</span>
<i>at 2022-08-10T01:21:16-04:00</i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 0.8125rem; color: #303030; position: relative; font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; word-break: break-all; word-wrap: break-word; background-color: #fafafa; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dbdbdb;'>Relax instances for Functor combinators; put superclass on Class1 to make non-breaking
The first change makes the `Eq`, `Ord`, `Show`, and `Read` instances for
`Sum`, `Product`, and `Compose` match those for `:+:`, `:*:`, and `:.:`.
These have the proper flexible contexts that are exactly what the
instance needs:
For example, instead of
```haskell
instance (Eq1 f, Eq1 g, Eq a) => Eq (Compose f g a) where
(==) = eq1
```
we do
```haskell
deriving instance Eq (f (g a)) => Eq (Compose f g a)
```
But, that change alone is rather breaking, because until now `Eq (f a)`
and `Eq1 f` (and respectively the other classes and their `*1`
equivalents too) are *incomparable* constraints. This has always been an
annoyance of working with the `*1` classes, and now it would rear it's
head one last time as an pesky migration.
Instead, we give the `*1` classes superclasses, like so:
```haskell
(forall a. Eq a => Eq (f a)) => Eq1 f
```
along with some laws that canonicity is preserved, like:
```haskell
liftEq (==) = (==)
```
and likewise for `*2` classes:
```haskell
(forall a. Eq a => Eq1 (f a)) => Eq2 f
```
and laws:
```haskell
liftEq2 (==) = liftEq1
```
The `*1` classes also have default methods using the `*2` classes where
possible.
What this means, as explained in the docs, is that `*1` classes really
are generations of the regular classes, indicating that the methods can
be split into a canonical lifting combined with a canonical inner, with
the super class "witnessing" the laws[1] in a fashion.
Circling back to the pragmatics of migrating, note that the superclass
means evidence for the old `Sum`, `Product`, and `Compose` instances is
(more than) sufficient, so breakage is less likely --- as long no
instances are "missing", existing polymorphic code will continue to
work.
Breakage can occur when a datatype implements the `*1` class but not the
corresponding regular class, but this is almost certainly an oversight.
For example, containers made that mistake for `Tree` and `Ord`, which I
fixed in https://github.com/haskell/containers/pull/761, but fixing the
issue by adding `Ord1` was extremely *un*controversial.
`Generically1` was also missing `Eq`, `Ord`, `Read,` and `Show`
instances. It is unlikely this would have been caught without
implementing this change.
-----
[1]: In fact, someday, when the laws are part of the language and not
only documentation, we might be able to drop the superclass field of the
dictionary by using the laws to recover the superclass in an
instance-agnostic manner, e.g. with a *non*-overloaded function with
type:
```haskell
DictEq1 f -> DictEq a -> DictEq (f a)
```
But I don't wish to get into optomizations now, just demonstrate the
close relationship between the law and the superclass.
Bump haddock submodule because of test output changing.
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/a32663b385600a1ed3ef2b5f2fbcbc89dfde6957" style="color: #1068bf; text-decoration: none;">a32663b3</a></strong>
<div>
<span>by Douglas Wilson</span>
<i>at 2022-08-10T01:21:20-04:00</i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 0.8125rem; color: #303030; position: relative; font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; word-break: break-all; word-wrap: break-word; background-color: #fafafa; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dbdbdb;'>testsuite: 21651 add test for closeFdWith + setNumCapabilities
This bug does not affect windows, which does not use the
base module GHC.Event.Thread.
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/cd6068ee5e8b23edcb7672c5db729e13667a28e9" style="color: #1068bf; text-decoration: none;">cd6068ee</a></strong>
<div>
<span>by Douglas Wilson</span>
<i>at 2022-08-10T01:21:20-04:00</i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 0.8125rem; color: #303030; position: relative; font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; word-break: break-all; word-wrap: break-word; background-color: #fafafa; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dbdbdb;'>base: Fix races in IOManager (setNumCapabilities,closeFdWith)
Fix for #21651
Fixes three bugs:
- writes to eventManager should be atomic. It is accessed concurrently by ioManagerCapabilitiesChanged and closeFdWith.
- The race in closeFdWith described in the ticket.
- A race in getSystemEventManager where it accesses the 'IOArray' in
'eventManager' before 'ioManagerCapabilitiesChanged' has written to
'eventManager', causing an Array Index exception. The fix here is to
'yield' and retry.
</pre>
</li>
<li>
<strong style="font-weight: bold;"><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/051628b4589e0c5e8bae78aaa7698201a5f1071d" style="color: #1068bf; text-decoration: none;">051628b4</a></strong>
<div>
<span>by Trevis Elser</span>
<i>at 2022-08-10T01:21:24-04:00</i>
</div>
<pre class="commit-message" style='white-space: pre-wrap; display: block; font-size: 0.8125rem; color: #303030; position: relative; font-family: "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; word-break: break-all; word-wrap: break-word; background-color: #fafafa; border-radius: 2px; margin: 0; padding: 8px 12px; border: 1px solid #dbdbdb;'>Updates language extension documentation
Adding a 'Status' field with a few values:
- Deprecated
- Experimental
- InternalUseOnly
- Noting if included in 'GHC2021', 'Haskell2010' or 'Haskell98'
Those values are pulled from the existing descriptions or elsewhere in
the documentation.
While at it, include the :implied by: where appropriate, to provide
more detail.
Fixes #21475
</pre>
</li>
</ul>
<h4 style="margin-top: 10px; margin-bottom: 10px;">30 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#04359c28c9e4de11d44a0c6ab10e9245d68ee640" style="color: #1068bf; text-decoration: none;">
docs/users_guide/bugs.rst
</a>
</li>
<li class="file-stats">
<a href="#6888432f1c379175cdfed002dd45f0e733be6d93" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/binary_literals.rst
</a>
</li>
<li class="file-stats">
<a href="#365dbffe23a6b69ca85584d0895d39c23360b792" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/constrained_class_methods.rst
</a>
</li>
<li class="file-stats">
<a href="#c4b380585d4ab911440499812eb27c1c99bd2a01" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/constraint_kind.rst
</a>
</li>
<li class="file-stats">
<a href="#7f6e6f40fd07cf3682828359e6e269358623a9fc" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/datatype_contexts.rst
</a>
</li>
<li class="file-stats">
<a href="#bdbe6161ac51a0072a62bb6ddfca5b31edfc51ff" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/deriving_extra.rst
</a>
</li>
<li class="file-stats">
<a href="#391e5f837d21fb499c1a09ae935a92c9c11e5777" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/duplicate_record_fields.rst
</a>
</li>
<li class="file-stats">
<a href="#a30bda6e85fb50de8a26e16eb19e500f557692db" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/empty_case.rst
</a>
</li>
<li class="file-stats">
<a href="#df56040a25aaabc284b3f8d0ba7b5f97acf595b9" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/empty_data_deriving.rst
</a>
</li>
<li class="file-stats">
<a href="#7ac989ce2970eedd8fbc550755c61f8fb2a48e91" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/existential_quantification.rst
</a>
</li>
<li class="file-stats">
<a href="#afd1105d8e32dc50acf9fc381b4433a3bcd009cf" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/explicit_forall.rst
</a>
</li>
<li class="file-stats">
<a href="#541099a80c36a6af9e33ab40a14cd9234829cab4" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/explicit_namespaces.rst
</a>
</li>
<li class="file-stats">
<a href="#f1fb2cbc6312f41f6aac14d2046c24ce0c5cbea2" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/ffi.rst
</a>
</li>
<li class="file-stats">
<a href="#1d70757a1b535980503ffcd18cd3df699d52d2b3" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/field_selectors.rst
</a>
</li>
<li class="file-stats">
<a href="#40c5c361272a89e26a4c177d35b70fb9af62f3a5" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/flexible_contexts.rst
</a>
</li>
<li class="file-stats">
<a href="#ab011b45b5ad3b42d8b43588d02f16a9a4ffee32" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/functional_dependencies.rst
</a>
</li>
<li class="file-stats">
<a href="#0cc784483e34410e9b43b5cfc23ee304faba81d1" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/gadt_syntax.rst
</a>
</li>
<li class="file-stats">
<a href="#a01dac24e3b25eddfb105ffdc509fa6c43a5f57a" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/generics.rst
</a>
</li>
<li class="file-stats">
<a href="#436ddddb43a95fb1618efe6f5f5fd4dd5235985f" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/hex_float_literals.rst
</a>
</li>
<li class="file-stats">
<a href="#2f959160a2038d2fab02953c14f17fc84766960c" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/import_qualified_post.rst
</a>
</li>
<li class="file-stats">
<a href="#ed75822e0b6142f196a6abeb623c7669d31b4711" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/instances.rst
</a>
</li>
<li class="file-stats">
<a href="#424e0a3495cd257902709b1c0eaffa019a8a45d8" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/kind_signatures.rst
</a>
</li>
<li class="file-stats">
<a href="#ed3ded36f1b6196f4f2ebe4bda264b89e8cf9093" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/let_generalisation.rst
</a>
</li>
<li class="file-stats">
<a href="#228f7530ac2289de7848ad95774f7aa4673c4431" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/linear_types.rst
</a>
</li>
<li class="file-stats">
<a href="#afae3087702fc914eb7ac47ad0ff78aa9609c98f" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/multi_param_type_classes.rst
</a>
</li>
<li class="file-stats">
<a href="#dff2ae845a441b4bf8794f2d0692335700fbfcf9" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/newtype_deriving.rst
</a>
</li>
<li class="file-stats">
<a href="#92ba00c828f290c2cf5ea524bbad52e0ccb171ba" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/nk_patterns.rst
</a>
</li>
<li class="file-stats">
<a href="#aaa6462f2c4179c34b81b9d957859abf78ed2e19" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/nullary_type_classes.rst
</a>
</li>
<li class="file-stats">
<a href="#91f761d72128be166aeea09529377cd8775c1afc" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/nullary_types.rst
</a>
</li>
<li class="file-stats">
<a href="#ea5aa59e7733cdb44cd0158a894c7929a9ace3f6" style="color: #1068bf; text-decoration: none;">
docs/users_guide/exts/numeric_underscores.rst
</a>
</li>
</ul>
<h5 style="margin-top: 10px; margin-bottom: 10px; font-size: 0.875rem;">The diff was not included because it is too large.</h5>
</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #666;">
—
<br>
<a href="https://gitlab.haskell.org/ghc/ghc/-/compare/a7c7ae9a406bb2b87f9aa5566ccfe5fe371cfb08...051628b4589e0c5e8bae78aaa7698201a5f1071d" style="color: #1068bf; text-decoration: none;">View it on GitLab</a>.
<br>
You're receiving this email because of your account on gitlab.haskell.org.
If you'd like to receive fewer emails, you can
adjust your notification settings.
</p>
</div>
</body>
</html>