Unexpected constraint when using ExistentialQuantification
Hello! Consider this simple code:
data Elem t = Typeable t => Elem Int
tst1 :: forall a. Elem a -> TypeRep
tst1 (Elem _) = typeRep (Proxy :: Proxy a)
It works and it should work. Elem is created only to be sure that if we've got a value of type Elem t we don't have to check that t is Typeable. <offtopic> By the way, exystential newtypes would be so awesome in GHC! </offtopic>
And now a strange thing. If we create another function:
tst2 :: forall a. Elem a -> TypeRep
tst2 _ = typeRep (Proxy :: Proxy a)
GHC throws error that there is no Typeable a constraint. The only difference between tst1 and tst2 is different pattern binding.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | high |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |