Opened 3 years ago
Closed 3 years ago
#11458 closed bug (fixed)
Terrible failure of type inference in visible type application
Reported by: | simonpj | Owned by: | goldfire |
---|---|---|---|
Priority: | highest | Milestone: | 8.0.1 |
Component: | Compiler (Type checker) | Version: | 7.10.3 |
Keywords: | TypeApplications | Cc: | |
Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
Type of failure: | None/Unknown | Test Case: | typecheck/should_compile/T11458 |
Blocked By: | Blocking: | ||
Related Tickets: | #11397 | Differential Rev(s): | |
Wiki Page: |
Description
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!!
Change History (6)
comment:1 Changed 3 years ago by
Keywords: | TypeApplications added |
---|---|
Owner: | set to goldfire |
comment:2 Changed 3 years ago by
comment:4 Changed 3 years ago by
Status: | new → merge |
---|---|
Test Case: | → typecheck/should_compile/T11458 |
comment:5 Changed 3 years ago by
Related Tickets: | → #11397 |
---|
comment:6 Changed 3 years ago by
Resolution: | → fixed |
---|---|
Status: | merge → closed |
This was merged in 278e1fa2fd7b33254e323d394706e72f4664ad02.
Note: See
TracTickets for help on using
tickets.
Yes. This is a
ReturnTv
problem. Fix is nearly done -- I'm just going through the testsuite today.