[GHC] #11458: Terrible failure of type inference in visible type application
GHC
ghc-devs at haskell.org
Tue Jan 19 08:07:47 UTC 2016
#11458: Terrible failure of type inference in visible type application
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: new
Priority: highest | Milestone: 8.0.1
Component: Compiler | Version: 7.10.3
(Type checker) |
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Consider
{{{
-- optIntArg :: (Maybe Int -> t2) -> (t2,t2)
optIntArg f = (f Nothing, f (Just True))
}}}
This is rejected (by HEAD)
{{{
T11379a.hs:5:30: error:
* Couldn't match type `a' with `Bool'
`a' is a rigid type variable bound by
a type expected by the context:
forall a. Maybe a
at T11379a.hs:5:30
Expected type: forall a. Maybe a
Actual type: Maybe Bool
* In the first argument of `f', namely `(Just True)'
In the expression: f (Just True)
In the expression: (f Nothing, f (Just True))
}}}
but if you put the tuple components the other way round, it works fine
{{{
optIntArg f = (f (Just True), f Nothing)
}}}
Adding the commented-out signature also makes it work fine.
I'm almost certain that this is caused by visible type application;
perhaps `Nothing` gets delayed instantiation, and then `f`'s type becomes
`forall a. Maybe a`. Utterly bogus.
I suspect it'll be fixed by Richards `ReturnTv` work, but let's make sure
it is. We can't release this!!
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11458>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list