[GHC] #11339: Possible type-checker regression in GHC 8.0
GHC
ghc-devs at haskell.org
Mon Jun 13 22:43:53 UTC 2016
#11339: Possible type-checker regression in GHC 8.0
-------------------------------------+-------------------------------------
Reporter: hvr | Owner: simonpj
Type: bug | Status: closed
Priority: highest | Milestone: 8.0.2
Component: Compiler (Type | Version: 8.0.1-rc1
checker) |
Resolution: fixed | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
| typecheck/should_compile/T11339,
| T11339b, T11339c, T11339d; partial-
| sigs/should_compile/T11339a
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by simonpj):
* status: new => closed
* testcase: =>
typecheck/should_compile/T11339, T11339b, T11339c, T11339d; partial-
sigs/should_compile/T11339a
* resolution: => fixed
Comment:
This is a complicated ticket, and I've spent an unreasonably long time on
the patch. But I'm very happy with the result.
There are a number of separate strands
* comment:12, I think `fanout` definitely needs a type signature for `go`.
Look at the GADT pattern match on `Refl` in the `Await` branch... GADTs
always need a type signature! I have no idea how 7.10 compiled this
program; maybe a bug!
* Difference between these two bindings:
{{{
Bazaar { getBazaar = t } = left sell s
t = getBazaar (left sell s)
}}}
Well, the first falls under the Monomorphism Restriction, while the
second does not. Simple as that.
* comment:4, item (2). I disagree:
{{{
foo :: Show a => a -> String
(foo) = show
}}}
Here the binding falls under the monomorphism restriction, and
cannot be rescued by a type signature. Test:
`typecheck/should_compile/T11339`
{{{
• Overloaded signature conflicts with monomorphism restriction
t :: forall (f :: * -> *). Applicative f => (a -> f b) -> f t
}}}
Adding `-XNoMonomorhismRestriction` makes it fine.
Test: `typecheck/should_compile/T11339b`
* comment:4, item (5), yes this was a bad bug
{{{
foo :: _
(foo) = id
}}}
Fixed: test is `partial-sigs/should_compile/T11339a`
Tricky stuff.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11339#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list