Ticket #179 (closed bug: fixed)
Instance match failure on openTypeKind
| Reported by: | simonpj | Owned by: | simonpj |
|---|---|---|---|
| Priority: | normal | Milestone: | 6.8.1 |
| Component: | Compiler (Type checker) | Version: | 6.4.1 |
| Keywords: | Cc: | ||
| Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
| Type of failure: | Difficulty: | Unknown | |
| Test Case: | tc175 | Blocked By: | |
| Blocking: | Related Tickets: |
Description (last modified by simonmar) (diff)
Consider
instance Show (a->b) where ...
foo x = show (\ _ -> True)
This fails with:
No instance for (Show (t -> Bool))
arising from use of `show' at Foo.hs:5
Reason: the type of (\_ -> True) is (t -> Bool) where
t has an "openTypeKind". It's possible that the function
will be applied to say an Int#, and the openTypeKind
records that this is OK.
BUT, the instance decl Show (a->b) has
a::liftedTypeKind, and that doesn't match an
openTypeKind type variable.
This bug relates to GHC's unsatisfactory treatment of
the variants of kind "type", for which there are at least 2
other SourceForge bugs registered (753780 and
753777). It's very obscure, so I'm not going to fix it
today.
Change History
Note: See
TracTickets for help on using
tickets.
