GHC issueshttps://gitlab.haskell.org/ghc/ghc/-/issues2020-02-06T23:54:14Zhttps://gitlab.haskell.org/ghc/ghc/-/issues/17797Lexer errors for newer unicode characters2020-02-06T23:54:14ZdminuosoLexer errors for newer unicode charactersIt appears that character from Unicode 6.0 and above lead to lexer errors.
```
unicode.hs:1:2: error: lexical error at character '\129315'
|
1 | (🤣) = ()
| ^
```It appears that character from Unicode 6.0 and above lead to lexer errors.
```
unicode.hs:1:2: error: lexical error at character '\129315'
|
1 | (🤣) = ()
| ^
```8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/17633Closed type family declaration accepts any name in LHS2020-01-03T21:33:08ZMaxim KoltsovClosed type family declaration accepts any name in LHS## Summary
Closed type family declaration will accept (almost) any name instead of family's name left of `=`.
## Steps to reproduce
```haskell
{-# LANGUAGE TypeFamilies #-}
module WTF where
type family Bar (a :: *) :: * where
Bar ...## Summary
Closed type family declaration will accept (almost) any name instead of family's name left of `=`.
## Steps to reproduce
```haskell
{-# LANGUAGE TypeFamilies #-}
module WTF where
type family Bar (a :: *) :: * where
Bar Int = ()
type family Foo (a :: *) :: * where
Bar Int = Bool
Bar Bool = Int
Bar a = a
```
When loaded to ghci, this file not only compiles, but works as if `Foo` were defined the normal way:
```
λ> :kind! Bar Int
Bar Int :: *
= ()
λ> :kind! Bar Bool
Bar Bool :: *
= Bar Bool
λ> :kind! Foo Int
Foo Int :: *
= Bool
λ> :kind! Foo Bool
Foo Bool :: *
= Int
λ> :kind! Foo Char
Foo Char :: *
= Char
```
It's clear that `Foo` is defined as it should be and that `Bar` is not broken by this definition.
## Expected behavior
GHC should emit an error in this case, as this code seems very strange.
Curiously, if `Bar` is not in scope GHC detects an error at `Foo`'s definition:
```
<interactive>:5:3: error:
Not in scope: type constructor or class ‘Bar’
```
Moreover, if I try to use some family from another module, it fails as well:
```
> import GHC.Generics
> :{
| type family Foo (a :: *) where
| Rep Bool = Maybe
| :}
<interactive>:6:3: error:
• Mismatched type name in type family instance.
Expected: Foo
Actual: Rep
```
## Environment
* GHC version used:
```console
$ stack exec -- ghc -V
The Glorious Glasgow Haskell Compilation System, version 8.6.3
```
* Operating System: macOS8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16964Documentation of RuntimeRep is wrong about 64-bit integer reps2022-02-12T03:28:41ZÖmer Sinan AğacanDocumentation of RuntimeRep is wrong about 64-bit integer repsDocumentation of `Int64Rep` and `Word64Rep` currently have the note "on 32-bit only" which seems wrong. Here's an example (this is on a 64-bit system):
```
~ $ cat Main.hs
{-# LANGUAGE TypeApplications, MagicHash #-}
import Type.Reflec...Documentation of `Int64Rep` and `Word64Rep` currently have the note "on 32-bit only" which seems wrong. Here's an example (this is on a 64-bit system):
```
~ $ cat Main.hs
{-# LANGUAGE TypeApplications, MagicHash #-}
import Type.Reflection
import GHC.Types
import GHC.Prim
import Data.Int
main = do
print (splitApps (typeRepKind (typeRep @Int64#)))
print (splitApps (typeRepKind (typeRep @Int#)))
~ $ ghc Main.hs
[1 of 1] Compiling Main ( Main.hs, Main.o )
Linking Main ...
~ $ ./Main
(TYPE,['Int64Rep])
(TYPE,['IntRep])
```
The documentation seems to suggest that `Int64Rep` should only be used on 32-bit systems, and we should get `IntRep` for `Int64#` on 64-bit.
[(Link to `RuntimeRep`)](https://hackage.haskell.org/package/base-4.12.0.0/docs/GHC-Exts.html#t:RuntimeRep)
(The same comments exist in GHC HEAD source tree too)
(cc @rae)8.8.1Carter SchonwaldJohn EricsonCarter Schonwaldhttps://gitlab.haskell.org/ghc/ghc/-/issues/16959Release tracking ticket for GHC 8.8.12022-02-11T16:59:45ZBen GamariRelease tracking ticket for GHC 8.8.1This is the release checklist for the %8.8.1 milestone. See #16816 for the template that this was derived from.
# Pre-release checklist
* [x] Remove the release notes for the previous release (e.g. `docs/users_guide/8.6.*-notes.rst`)
*...This is the release checklist for the %8.8.1 milestone. See #16816 for the template that this was derived from.
# Pre-release checklist
* [x] Remove the release notes for the previous release (e.g. `docs/users_guide/8.6.*-notes.rst`)
* [x] Make release branch (e.g. `ghc-8.8`)
* [x] Make post-release branch (e.g. `ghc-8.9-start`)
* [x] Submodules on released tags:
* [x] `libraries/Cabal`: version 3.0.0.0 (on -rc3)
* [x] `libraries/Win32`: version 2.6.1.0
* [x] `libraries/binary`: version 0.8.7.0
* [x] `libraries/bytestring`: version 0.10.10.0
* [x] `libraries/containers`: version 0.6.2.1
* [x] `libraries/deepseq`: version 1.4.4.0 ([ ] revision pushed)
* [x] `libraries/directory`: version 1.3.3.2 ([ ] revision pushed)
* [x] `libraries/filepath`: version 1.4.2.1 ([ ] revision pushed)
* [x] `libraries/haskeline`: version 0.7.5.0 ([ ] revision pushed)
* [x] `libraries/mtl`: version 2.2.2
* [x] `libraries/parsec`: version 3.1.14.0 (on -rc)
* [x] `libraries/pretty`: version 1.1.3.6
* [x] `libraries/process`: version 1.6.5.1 ([x] tag pushed)
* [x] `libraries/terminfo`: version 0.4.1.4
* [x] `libraries/text`: version 1.2.4.0 (on -rc)
* [x] `libraries/time`: version 1.9.3
* [x] `libraries/transformers`: version 0.5.6.2
* [x] `libraries/unix`: version 2.7.2.2
* [x] `libraries/xhtml`: version 3000.2.2.1
* [ ] `utils/haddock`: version *todo*
* [ ] `utils/hsc2hs`: version *todo*
* Non-released submodules up-to-date:
* [x] `nofib`
* [x] `libffi-tarballs`
* [x] `libraries/integer-gmp/gmp/gmp-tarballs`
* [x] Release notes written
* [x] Release notes linked in `index.rst`
* [x] `autoconf` scripts [updated](https://gitlab.haskell.org/ghc/ghc/wikis/making-releases#updating-the-tree)
* [x] `LlvmVersion` in `configure.ac` is targetting intended LLVM version
* [x] Release notes mentions LLVM version requirement
* [x] `llvm-targets` file [updated](https://gitlab.haskell.org/ghc/ghc/wikis/making-releases#updating-the-tree)
* [x] Changelogs updated:
* [x] `libraries/ghc-prim`
* [x] `libraries/integer-gmp`
* [x] `libraries/integer-simple`
* [x] `libraries/hpc`
* [x] `libraries/base`: Version 4.13.0.0
* [x] `libraries/ghc-boot`
* [x] `libraries/ghc-boot-th`
* [x] Verify that the ~"backport needed" label has no more issues/merge requests needing backport
* [x] Verify that all CI builds are green before moving to *release checklist*
# Release checklist
* [x] [Make tag](https://gitlab.haskell.org/ghc/ghc/wikis/making-releases#tagging-the-release)
* [x] Wait until builds finish
* [x] Fetch release artifacts TODO: documentation
* [x] Sign and push release artifacts to `downloads.haskell.org` [TODO: documentation]
* [ ] Release/revise GHC-maintained libraries on Hackage [TODO: documentation]
* [ ] `libraries/base`
* [ ] `libraries/ghc-prim`
* [ ] `libraries/array`
* [ ] `libraries/stm`
* [ ] `libraries/ghc-heap`
* [ ] `libraries/ghc-compact`
* [ ] `libraries/ghc-boot`
* [ ] `libraries/ghc-boot-th`
* [ ] `libraries/hpc`
* [ ] `libraries/libiserv`
* [ ] `libraries/template-haskell`
* [ ] `libraries/integer-gmp`
* [ ] `libraries/integer-simple`
* [ ] Update ghc/homepage>:
* [x] Write download page (see ghc/homepage>)
* [x] Add news item to [`index.html`](https://gitlab.haskell.org/ghc/homepage/blob/master/index.shtml)
* [x] Add link to [`download.shtml`](https://gitlab.haskell.org/ghc/homepage/blob/master/download.shtml)
* [x] Look over changes locally
* [x] Add release announcement to [GHC blog](https://gitlab.haskell.org/ghc/homepage/tree/master/blog)
* [x] Push changes to `master`
* [x] Announce on: `GHC developers <ghc-devs@haskell.org>, GHC Users <glasgow-haskell-users@haskell.org>, Haskell Cafe <haskell-cafe@haskell.org>`
* [x] Announce on: [Haskell Discourse](https://discourse.haskell.org/), [/r/haskell](https://reddit.com/r/haskell), [Twitter](https://twitter.com/)
* [x] Update `latest` symlink on `downloads.haskell.org`
* [ ] Ensure that the [Migration](https://gitlab.haskell.org/ghc/ghc/wikis/migration/) page is up-to-date
# Post-release checklist
* [ ] Update the Wiki [status page](https://gitlab.haskell.org/ghc/ghc/wikis/status)
* [ ] Update the [language pragma history](https://gitlab.haskell.org/ghc/ghc/wikis/language-pragma-history)
* [ ] Mark milestone as *closed*
* [ ] Update the [VersionHistory](https://gitlab.haskell.org/ghc/ghc/wikis/commentary/libraries/version-history) wiki page
* [ ] Set `RELEASE=NO`8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16857clang should be used on OpenBSD2020-01-24T23:46:20Zrolandclang should be used on OpenBSD```shell
$ uname -sr
OpenBSD 6.4
$ export AUTOCONF_VERSION=2.69
$ export AUTOMAKE_VERSION=1.16...```shell
$ uname -sr
OpenBSD 6.4
$ export AUTOCONF_VERSION=2.69
$ export AUTOMAKE_VERSION=1.16
$ ./boot
$ ./configure
[...]
checking version of gcc... configure: error: Need at least gcc version 4.4 (4.7+ recommended)
```
Indeed OpenBSD's included gcc appears to be too old:
```shell
$ gcc --version
gcc (GCC) 4.2.1 20070719
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```
But luckily it also ships with `clang`, which could be used instead:
```
$ clang --version
OpenBSD clang version 6.0.0 (tags/RELEASE_600/final) (based on LLVM 6.0.0)
Target: amd64-unknown-openbsd6.4
Thread model: posix
InstalledDir: /usr/bin
```8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16339Cannot put (.) or (!) type operators into an export list2019-07-07T18:00:27ZRyan ScottCannot put (.) or (!) type operators into an export listThanks to recent work in GHC HEAD, it is now possible to define type operators named `(.)` and `(!)`:
```hs
type (f . g) x = f (g x)
type x ! f = f x
```
However, I was surprised to discover that it's not possible to put them in an exp...Thanks to recent work in GHC HEAD, it is now possible to define type operators named `(.)` and `(!)`:
```hs
type (f . g) x = f (g x)
type x ! f = f x
```
However, I was surprised to discover that it's not possible to put them in an export list! That is to say, this program doesn't parse:
```
{-# LANGUAGE TypeOperators #-}
module Bug (type (.), type (!)) where
type (f . g) x = f (g x)
type x ! f = f x
```
```
$ ~/Software/ghc4/inplace/bin/ghc-stage2 --interactive Bug.hs
GHCi, version 8.7.20190219: https://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
Bug.hs:2:19: error: parse error on input ‘.’
|
2 | module Bug (type (.), type (!)) where
| ^
```
This problem appears to be specific to the `(.)` and `(!)` type operators, since any other type operator will work in its place:
```hs
{-# LANGUAGE TypeOperators #-}
module Works (type (&)) where
type (f & g) x = f (g x)
```
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ----------------- |
| Version | 8.7 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | int-index |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Cannot put (.) or (!) into an export list","status":"New","operating_system":"","component":"Compiler (Parser)","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.7","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":["int-index"],"type":"Bug","description":"Thanks to recent work in GHC HEAD, it is now possible to define type operators named `(.)` and `(!)`:\r\n\r\n{{{#!hs\r\ntype (f . g) x = f (g x)\r\ntype x ! f = f x\r\n}}}\r\n\r\nHowever, I was surprised to discover that it's not possible to put them in an export list! That is to say, this program doesn't parse:\r\n\r\n{{{\r\n{-# LANGUAGE TypeOperators #-}\r\nmodule Bug (type (.), type (!)) where\r\n\r\ntype (f . g) x = f (g x)\r\ntype x ! f = f x\r\n}}}\r\n{{{\r\n$ ~/Software/ghc4/inplace/bin/ghc-stage2 --interactive Bug.hs\r\nGHCi, version 8.7.20190219: https://www.haskell.org/ghc/ :? for help\r\nLoaded GHCi configuration from /home/rgscott/.ghci\r\n\r\nBug.hs:2:19: error: parse error on input ‘.’\r\n |\r\n2 | module Bug (type (.), type (!)) where\r\n | ^\r\n}}}\r\n\r\nThis problem appears to be specific to the `(.)` and `(!)` type operators, since any other type operator will work in its place:\r\n\r\n{{{#!hs\r\n{-# LANGUAGE TypeOperators #-}\r\nmodule Works (type (&)) where\r\n\r\ntype (f & g) x = f (g x)\r\n}}}","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16311Suggest -XExistentialQuantification for 'forall' in data declarations2019-07-07T18:00:34ZVladislav ZavialovSuggest -XExistentialQuantification for 'forall' in data declarations[D5180](https://phabricator.haskell.org/D5180) introduced a slight regression to the error messages. In this code
```hs
data T = forall a. MkT a
```
GHC used to complain
```
rnfail053.hs:5:10:
Not a data constructor: ‘forall’
...[D5180](https://phabricator.haskell.org/D5180) introduced a slight regression to the error messages. In this code
```hs
data T = forall a. MkT a
```
GHC used to complain
```
rnfail053.hs:5:10:
Not a data constructor: ‘forall’
Perhaps you intended to use ExistentialQuantification
```
but then the message has become
```
rnfail053.hs:5:18: error:
Illegal symbol '.' in type
Perhaps you intended to use RankNTypes or a similar language
extension to enable explicit-forall syntax: forall <tvs>. <type>
```
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ----------------- |
| Version | 8.6.3 |
| Type | Task |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Suggest -XExistentialQuantification for 'forall' in data declarations","status":"New","operating_system":"","component":"Compiler (Parser)","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Task","description":"Phab:D5180 introduced a slight regression to the error messages. In this code\r\n\r\n{{{#!hs\r\ndata T = forall a. MkT a\r\n}}}\r\n\r\nGHC used to complain\r\n\r\n{{{\r\nrnfail053.hs:5:10:\r\n Not a data constructor: ‘forall’\r\n Perhaps you intended to use ExistentialQuantification\r\n}}}\r\n\r\nbut then the message has become\r\n\r\n{{{\r\nrnfail053.hs:5:18: error:\r\n Illegal symbol '.' in type\r\n Perhaps you intended to use RankNTypes or a similar language\r\n extension to enable explicit-forall syntax: forall <tvs>. <type>\r\n}}}\r\n\r\n","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16309Flag to instruct GHC not to use an environment file2019-07-07T18:00:35ZRichard Eisenbergrae@richarde.devFlag to instruct GHC not to use an environment fileAs the [user manual](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/packages.html#package-environments) documents, GHC looks for environment files in the current directory to tell it what packages to look for. There seem...As the [user manual](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/packages.html#package-environments) documents, GHC looks for environment files in the current directory to tell it what packages to look for. There seems to be no way to disable this behavior (short of deleting or renaming the environment file). This causes trouble for me, as I expect `ghci` to mean the same thing no matter where I say it.
Can we add a flag (perhaps `-no-package-env`) that tells GHC not to look for an environment file? Note that specifying a dummy package environment file doesn't work because we can't suppress the implicit `-hide-all-packages` that is triggered whenever using a package environment.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | -------------- |
| Version | 8.6.3 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Flag to instruct GHC not to use an environment file","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"FeatureRequest","description":"As the [https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/packages.html#package-environments user manual] document, GHC looks for environment files in the current directory to tell it what packages to look for. There seems to be no way to disable this behavior (short of deleting or renaming the environment file). This causes trouble for me, as I expect `ghci` to mean the same thing no matter where I say it.\r\n\r\nCan we add a flag (perhaps `-no-package-env`) that tells GHC not to look for an environment file? Note that specifying a dummy package environment file doesn't work because we can't suppress the implicit `-hide-all-packages` that is triggered whenever using a package environment.","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16303checkStack sanity check fails2019-07-07T18:00:36ZÖmer Sinan AğacancheckStack sanity check failscheckStackChunk() currently has a commented-out assertion:
```
void
checkStackChunk( StgPtr sp, StgPtr stack_end )
{
StgPtr p;
p = sp;
while (p < stack_end) {
p += checkStackFrame( p );
}
// ASSERT( p == sta...checkStackChunk() currently has a commented-out assertion:
```
void
checkStackChunk( StgPtr sp, StgPtr stack_end )
{
StgPtr p;
p = sp;
while (p < stack_end) {
p += checkStackFrame( p );
}
// ASSERT( p == stack_end ); -- HWL
}
```
I realized a while ago that if I enable it, it fails in some cases, so I asked
Simon Marlow about this. Quoting:
> I don't know, but blame says it was disabled by Hans-Wolfgang Loidl as part of
> the GUM merge 18 years ago. I suggest just enabling it and debug whatever goes
> wrong.
This ticket is to enable the assertion and fix bugs.
To reproduce, run the test suite:
```
$ make EXTRA_HC_OPTS='-debug -rtsopts' WAY=sanity
```
Tests that trigger the assertion:
- annrun01
- T10508_api
- dynCompileExpr
Tried with GHC HEAD
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ------------ |
| Version | |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"checkStack sanity check fails","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"checkStackChunk() currently has a commented-out assertion:\r\n\r\n{{{\r\nvoid\r\ncheckStackChunk( StgPtr sp, StgPtr stack_end )\r\n{\r\n StgPtr p;\r\n\r\n p = sp;\r\n while (p < stack_end) {\r\n p += checkStackFrame( p );\r\n }\r\n // ASSERT( p == stack_end ); -- HWL\r\n}\r\n}}}\r\n\r\nI realized a while ago that if I enable it, it fails in some cases, so I asked\r\nSimon Marlow about this. Quoting:\r\n\r\n> I don't know, but blame says it was disabled by Hans-Wolfgang Loidl as part of\r\n> the GUM merge 18 years ago. I suggest just enabling it and debug whatever goes\r\n> wrong.\r\n\r\nThis ticket is to enable the assertion and fix bugs.\r\n\r\nTo reproduce, run the test suite:\r\n\r\n{{{\r\n$ make EXTRA_HC_OPTS='-debug -rtsopts' WAY=sanity\r\n}}}\r\n\r\nTests that trigger the assertion:\r\n\r\n- annrun01\r\n- T10508_api\r\n- dynCompileExpr\r\n\r\nTried with GHC HEAD","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16287:kind accepts bogus type2019-07-07T18:00:40ZSimon Peyton Jones:kind accepts bogus typeConsider this (current HEAD)
```
ghci> type family F :: k
ghci> data T :: (forall k. k) -> Type
ghci> :kind T F
T F :: *
```
This is bogus. `F` has arity 1, and cannot appear unsaturated.
<details><summary>Trac metadata</summary>
| T...Consider this (current HEAD)
```
ghci> type family F :: k
ghci> data T :: (forall k. k) -> Type
ghci> :kind T F
T F :: *
```
This is bogus. `F` has arity 1, and cannot appear unsaturated.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ------------ |
| Version | 8.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":":kind accepts bogus type","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"Consider this (current HEAD)\r\n{{{\r\nghci> type family F :: k\r\nghci> data T :: (forall k. k) -> Type\r\nghci> :kind T F\r\nT F :: *\r\n}}}\r\nThis is bogus. `F` has arity 1, and cannot appear unsaturated.\r\n","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16279Lexer: Alternate Layout Rule injects actual not virtual braces2019-07-07T18:00:42ZAlan ZimmermanLexer: Alternate Layout Rule injects actual not virtual bracesWhen the alternate layout rule is activated via a pragma, it injects tokens for `{` and `}` to make sure that the source is parsed properly.
But it injects `ITocurly` and `ITccurly`, rather than their virtual counterparts `ITvocurly` an...When the alternate layout rule is activated via a pragma, it injects tokens for `{` and `}` to make sure that the source is parsed properly.
But it injects `ITocurly` and `ITccurly`, rather than their virtual counterparts `ITvocurly` and `ITvccurly`.
This causes problems for `ghc-exactprint`, which tries to print these.
Test case (the existing T13087.hs)
```hs
{-# LANGUAGE AlternativeLayoutRule #-}
{-# LANGUAGE LambdaCase #-}
isOne :: Int -> Bool
isOne = \case 1 -> True
_ -> False
main = return ()
```
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ----------------- |
| Version | 8.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Lexer: Alternate Layout Rule injects actual not virtual braces","status":"New","operating_system":"","component":"Compiler (Parser)","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"When the alternate layout rule is activated via a pragma, it injects tokens for `{` and `}` to make sure that the source is parsed properly.\r\n\r\nBut it injects `ITocurly` and `ITccurly`, rather than their virtual counterparts `ITvocurly` and `ITvccurly`.\r\n\r\nThis causes problems for `ghc-exactprint`, which tries to print these.\r\n\r\nTest case (the existing T13087.hs)\r\n \r\n{{{#!hs\r\n{-# LANGUAGE AlternativeLayoutRule #-}\r\n{-# LANGUAGE LambdaCase #-}\r\n\r\nisOne :: Int -> Bool\r\nisOne = \\case 1 -> True\r\n _ -> False\r\n\r\nmain = return ()\r\n}}}","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1Alan ZimmermanAlan Zimmermanhttps://gitlab.haskell.org/ghc/ghc/-/issues/16265API Annotations: parens anns discarded for `(*)` operator2019-07-07T18:00:45ZAlan ZimmermanAPI Annotations: parens anns discarded for `(*)` operatorThe patch from https://phabricator.haskell.org/D4865 introduces
```hs
go _ (HsParTy _ (dL->L l (HsStarTy _ isUni))) acc ann fix
= do { warnStarBndr l
; let name = mkOccName tcClsName (if isUni then "★" else "*")
...The patch from https://phabricator.haskell.org/D4865 introduces
```hs
go _ (HsParTy _ (dL->L l (HsStarTy _ isUni))) acc ann fix
= do { warnStarBndr l
; let name = mkOccName tcClsName (if isUni then "★" else "*")
; return (cL l (Unqual name), acc, fix, ann) }
```
which discards the parens annotations belonging to the `HsParTy`.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ----------------- |
| Version | 8.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"API Annotations: parens anns discarded for `(*)` operator","status":"New","operating_system":"","component":"Compiler (Parser)","related":[],"milestone":"8.8.1","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"The patch from https://phabricator.haskell.org/D4865 introduces\r\n\r\n{{{#!hs\r\n go _ (HsParTy _ (dL->L l (HsStarTy _ isUni))) acc ann fix\r\n = do { warnStarBndr l\r\n ; let name = mkOccName tcClsName (if isUni then \"★\" else \"*\")\r\n ; return (cL l (Unqual name), acc, fix, ann) }\r\n}}}\r\n\r\nwhich discards the parens annotations belonging to the `HsParTy`.","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1Alan ZimmermanAlan Zimmermanhttps://gitlab.haskell.org/ghc/ghc/-/issues/16260Use of plugins causes different SafeHaskellMode returned for the module2019-07-07T18:00:46ZZejun WuUse of plugins causes different SafeHaskellMode returned for the moduleUse of plugins will mark safe inference as failed, even when the plugin does not modify anything. This can result in compile error when -XSafe is used. For example:
```
$ cat DefaultPlugin.hs
module DefaultPlugin (plugin) where
import G...Use of plugins will mark safe inference as failed, even when the plugin does not modify anything. This can result in compile error when -XSafe is used. For example:
```
$ cat DefaultPlugin.hs
module DefaultPlugin (plugin) where
import GhcPlugins
plugin = defaultPlugin
$ cat B.hs
{-# OPTIONS_GHC -fplugin DefaultPlugin #-}
module B (answer) where
answer = 42
$ cat A.hs
{-# LANGUAGE Safe #-}
module A (main) where
import B
main = print answer
$ ...
A.hs:4:1: error:
B: Can't be safely imported! The module itself isn't safe.
```
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ------------ |
| Version | 8.7 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Use of plugins causes -XSafe to fail","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.7","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"Use of plugins will mark safe inference as failed, even when the plugin does not modify anything. This can result in compile error when -XSafe is used. For example:\r\n\r\n{{{\r\n$ cat DefaultPlugin.hs\r\nmodule DefaultPlugin (plugin) where\r\nimport GhcPlugins\r\nplugin = defaultPlugin\r\n\r\n$ cat B.hs\r\n{-# OPTIONS_GHC -fplugin DefaultPlugin #-}\r\nmodule B (answer) where\r\nanswer = 42\r\n\r\n$ cat A.hs\r\n{-# LANGUAGE Safe #-}\r\nmodule A (main) where\r\nimport B\r\nmain = print answer\r\n\r\n$ ...\r\nA.hs:4:1: error:\r\n B: Can't be safely imported! The module itself isn't safe.\r\n}}}","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1Zejun WuZejun Wuhttps://gitlab.haskell.org/ghc/ghc/-/issues/16255Visible kind application defeats type family with higher-rank result kind2019-07-07T18:00:47ZRyan ScottVisible kind application defeats type family with higher-rank result kindAfter #15740, GHC now (correctly) rejects this program:
```hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module Bug where
import Dat...After #15740, GHC now (correctly) rejects this program:
```hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module Bug where
import Data.Kind
data SBool :: Bool -> Type
type family F :: forall k. k -> Type where
F = SBool
```
```
$ ~/Software/ghc5/inplace/bin/ghc-stage2 --interactive Bug.hs
GHCi, version 8.7.20190115: https://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
[1 of 1] Compiling Bug ( Bug.hs, interpreted )
Bug.hs:12:7: error:
• Expected kind ‘forall k. k -> *’,
but ‘SBool’ has kind ‘Bool -> *’
• In the type ‘SBool’
In the type family declaration for ‘F’
|
12 | F = SBool
| ^^^^^
```
However, there's a very simple way to circumvent this: add a visible kind application to `F`'s equation.
```hs
type family F :: forall k. k -> Type where
F @Bool = SBool
```
If I understand things correctly, GHC shouldn't allow this.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ----------------------- |
| Version | 8.7 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Visible kind application defeats type family with higher-rank result kind","status":"New","operating_system":"","component":"Compiler (Type checker)","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.7","keywords":["TypeApplications,","TypeFamilies"],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"After #15740, GHC now (correctly) rejects this program:\r\n\r\n{{{#!hs\r\n{-# LANGUAGE DataKinds #-}\r\n{-# LANGUAGE PolyKinds #-}\r\n{-# LANGUAGE RankNTypes #-}\r\n{-# LANGUAGE TypeApplications #-}\r\n{-# LANGUAGE TypeFamilies #-}\r\nmodule Bug where\r\n\r\nimport Data.Kind\r\n\r\ndata SBool :: Bool -> Type\r\ntype family F :: forall k. k -> Type where\r\n F = SBool\r\n}}}\r\n{{{\r\n$ ~/Software/ghc5/inplace/bin/ghc-stage2 --interactive Bug.hs\r\nGHCi, version 8.7.20190115: https://www.haskell.org/ghc/ :? for help\r\nLoaded GHCi configuration from /home/rgscott/.ghci\r\n[1 of 1] Compiling Bug ( Bug.hs, interpreted )\r\n\r\nBug.hs:12:7: error:\r\n • Expected kind ‘forall k. k -> *’,\r\n but ‘SBool’ has kind ‘Bool -> *’\r\n • In the type ‘SBool’\r\n In the type family declaration for ‘F’\r\n |\r\n12 | F = SBool\r\n | ^^^^^\r\n}}}\r\n\r\nHowever, there's a very simple way to circumvent this: add a visible kind application to `F`'s equation.\r\n\r\n{{{#!hs\r\ntype family F :: forall k. k -> Type where\r\n F @Bool = SBool\r\n}}}\r\n\r\nIf I understand things correctly, GHC shouldn't allow this.","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16236API Annotations: AnnAt disconnected for TYPEAPP2019-07-07T18:00:51ZAlan ZimmermanAPI Annotations: AnnAt disconnected for TYPEAPPFor the code
```hs
type family F1 (a :: k) (f :: k -> Type) :: Type where
F1 @Peano a f = T @Peano f a
```
the API annotation for the first `@` is not attached to a `SourcSpan` in the `ParsedSource`
<details><summary>Trac metadata</...For the code
```hs
type family F1 (a :: k) (f :: k -> Type) :: Type where
F1 @Peano a f = T @Peano f a
```
the API annotation for the first `@` is not attached to a `SourcSpan` in the `ParsedSource`
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ----------------- |
| Version | 8.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"API Annotations: AnnAt disconnected for TYPEAPP","status":"New","operating_system":"","component":"Compiler (Parser)","related":[],"milestone":"8.8.1","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"For the code\r\n\r\n{{{#!hs\r\ntype family F1 (a :: k) (f :: k -> Type) :: Type where\r\n F1 @Peano a f = T @Peano f a\r\n}}}\r\n\r\nthe API annotation for the first `@` is not attached to a `SourcSpan` in the `ParsedSource`","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1Alan ZimmermanAlan Zimmermanhttps://gitlab.haskell.org/ghc/ghc/-/issues/16230API Annotations: more explicit foralls fixup2019-07-07T18:00:53ZAlan ZimmermanAPI Annotations: more explicit foralls fixupThe `AnnForall` annotations introduced via [D4894](https://phabricator.haskell.org/D4894) are not always attached to the correct `SourceSpan`.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| -...The `AnnForall` annotations introduced via [D4894](https://phabricator.haskell.org/D4894) are not always attached to the correct `SourceSpan`.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ----------------- |
| Version | 8.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"API Annotations: more explicit foralls fixup","status":"New","operating_system":"","component":"Compiler (Parser)","related":[],"milestone":"8.8.1","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"The `AnnForall` annotations introduced via Phab:D4894 are not always attached to the correct `SourceSpan`.\r\n\r\n","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1Alan ZimmermanAlan Zimmermanhttps://gitlab.haskell.org/ghc/ghc/-/issues/16217check-api-annotations should check that an annotation does not precede its span2019-07-07T18:00:56ZAlan Zimmermancheck-api-annotations should check that an annotation does not precede its spanFor an API annotation to be useful, it must not occur before the span it is enclosed in.
So, for `check-api-annotation` output, a line such as
```
((Test16212.hs:3:22-36,AnnOpenP), [Test16212.hs:3:21]),
```
should be flagged as an err...For an API annotation to be useful, it must not occur before the span it is enclosed in.
So, for `check-api-annotation` output, a line such as
```
((Test16212.hs:3:22-36,AnnOpenP), [Test16212.hs:3:21]),
```
should be flagged as an error, as the `AnnOpenP` location of `3:21` precedes its enclosing span of `3:22-26`.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ------------ |
| Version | 8.6.3 |
| Type | Task |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Test Suite |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"check-api-annotations should check that an annotation does not precede its span","status":"New","operating_system":"","component":"Test Suite","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Task","description":"For an API annotation to be useful, it must not occur before the span it is enclosed in.\r\n\r\nSo, for `check-api-annotation` output, a line such as\r\n\r\n{{{\r\n((Test16212.hs:3:22-36,AnnOpenP), [Test16212.hs:3:21]),\r\n}}}\r\n\r\nshould be flagged as an error, as the `AnnOpenP` location of `3:21` precedes its enclosing span of `3:22-26`.\r\n","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16212API Annotations: Parens not attached correctly for ClassDecl2019-07-07T18:00:57ZAlan ZimmermanAPI Annotations: Parens not attached correctly for ClassDeclFor the file
```hs
module ClassParens where
class LiftingMonad (trans :: MTrans) where
proof :: Monad m :- Monad (trans m)
class LiftingMonad2 ((trans :: MTrans)) where
proof :: Monad m :- Monad (trans m)
```
The parens around ...For the file
```hs
module ClassParens where
class LiftingMonad (trans :: MTrans) where
proof :: Monad m :- Monad (trans m)
class LiftingMonad2 ((trans :: MTrans)) where
proof :: Monad m :- Monad (trans m)
```
The parens around the kinded tyvars should be attached to the class declaration as a whole, they are attached to the tyvar instead, outside the span.
An annotation must always be within the span it is contained in.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ----------------- |
| Version | 8.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Parser) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"API Annotations: Parens not attached correctly for ClassDecl","status":"New","operating_system":"","component":"Compiler (Parser)","related":[],"milestone":"8.8.1","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.6.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"Bug","description":"For the file\r\n\r\n{{{#!hs\r\nmodule ClassParens where\r\n\r\nclass LiftingMonad (trans :: MTrans) where\r\n proof :: Monad m :- Monad (trans m)\r\n\r\nclass LiftingMonad2 ((trans :: MTrans)) where\r\n proof :: Monad m :- Monad (trans m)\r\n}}}\r\n\r\nThe parens around the kinded tyvars should be attached to the class declaration as a whole, they are attached to the tyvar instead, outside the span. \r\n\r\nAn annotation must always be within the span it is contained in.","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1Alan ZimmermanAlan Zimmermanhttps://gitlab.haskell.org/ghc/ghc/-/issues/16197Strictness is not preserved under -O12021-09-21T14:11:59ZAlex LangStrictness is not preserved under -O1With -O0, the attached code prints:
```
> /usr/local/ghc/ghc-8.4.1.0/bin/ghc -O0 src/foo.hs; and ./src/foo
[1 of 1] Compiling Main ( src/foo.hs, src/foo.o ) [Optimisation flags changed]
Linking src/foo ...
("exec",0)
("depth...With -O0, the attached code prints:
```
> /usr/local/ghc/ghc-8.4.1.0/bin/ghc -O0 src/foo.hs; and ./src/foo
[1 of 1] Compiling Main ( src/foo.hs, src/foo.o ) [Optimisation flags changed]
Linking src/foo ...
("exec",0)
("depth",0)
("exec",1)
("depth",0)
```
But with -O1, it prints:
```
> /usr/local/ghc/ghc-8.4.1.0/bin/ghc -O1 src/foo.hs; and ./src/foo
[1 of 1] Compiling Main ( src/foo.hs, src/foo.o )
Linking src/foo ...
("depth",0)
("depth",0)
```
Reproduced with 8.4.1 and 8.6.2. Doesn't seem to happen under 8.2.0
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | ------------ |
| Version | 8.4.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | me@alang.ca |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Strictness is not preserved under -O1","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"8.4.1","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":["me@alang.ca"],"type":"Bug","description":"With -O0, the attached code prints:\r\n\r\n{{{\r\n> /usr/local/ghc/ghc-8.4.1.0/bin/ghc -O0 src/foo.hs; and ./src/foo\r\n[1 of 1] Compiling Main ( src/foo.hs, src/foo.o ) [Optimisation flags changed]\r\nLinking src/foo ...\r\n(\"exec\",0)\r\n(\"depth\",0)\r\n(\"exec\",1)\r\n(\"depth\",0)\r\n}}}\r\n\r\nBut with -O1, it prints:\r\n\r\n{{{\r\n> /usr/local/ghc/ghc-8.4.1.0/bin/ghc -O1 src/foo.hs; and ./src/foo\r\n[1 of 1] Compiling Main ( src/foo.hs, src/foo.o )\r\nLinking src/foo ...\r\n(\"depth\",0)\r\n(\"depth\",0)\r\n}}}\r\n\r\nReproduced with 8.4.1 and 8.6.2. Doesn't seem to happen under 8.2.0\r\n","type_of_failure":"OtherFailure","blocking":[]} -->8.8.1https://gitlab.haskell.org/ghc/ghc/-/issues/16191GHC Panic deriving unbox vector (StrictData/unbox-strict-fields interaction)2019-07-07T18:01:01ZdbeachamGHC Panic deriving unbox vector (StrictData/unbox-strict-fields interaction)The attached program
```
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Lib where
import qualified Data.Vector.Unboxed as V
import ...The attached program
```
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Lib where
import qualified Data.Vector.Unboxed as V
import Data.Vector.Unboxed.Deriving
data V a = V {-# UNPACK #-} !a {-# UNPACK #-} !a
deriving (Show)
derivingUnbox "V"
[t| forall a. V.Unbox a => V a -> (a, a) |]
[| \(V a b) -> (a, b) |]
[| \(a, b) -> V a b |]
```
fails to compile with the following error:
```
ghc: panic! (the 'impossible' happened)
(GHC version 8.6.3 for x86_64-unknown-linux):
mkNewTyConRhs
MV_V [Int#, MVector s_a7WC[sk:1] a_a7WA[sk:1],
MVector s_a7WC[sk:1] a_a7WA[sk:1]]
Call stack:
CallStack (from HasCallStack):
callStackDoc, called at compiler/utils/Outputable.hs:1160:37 in ghc:Outputable
pprPanic, called at compiler/iface/BuildTyCl.hs:65:27 in ghc:BuildTyCl
```
Removing either of the -funbox-strict-fields or StrictData pragma allow the code to compile correctly, but you do need to compile with -O to get the incorrect behaviour -ghci is fine loading the module.
Although I wouldn't expect them to interact here as I don't get the same behaviour if I explicitly write out what would be implied by the flag and pragma:
```
data V a = V {-# UNPACK #-} !a {-# UNPACK #-} !a
deriving (Show)
```
just warnings about the unused UNPACKs.8.8.1