Suggested type signature for a pattern synonym causes program to fail to type check
Take the following program:
{-# LANGUAGE ViewPatterns, PatternSynonyms, RankNTypes, GADTs #-}
import Data.Typeable
data T where
MkT :: Typeable a => a -> T
pattern Cast a <- MkT (cast -> Just a)
When compiled with -Wall, GHC rightly prompts about a missing signature on Cast:
Top-level binding with no type signature:
Cast :: forall b. Typeable b => forall a. Typeable a => b -> T
However, using this suggested type signature causes the program to fail to type check:
• Could not deduce (Typeable a0)
arising from the "provided" constraints claimed by
the signature of ‘Cast’
from the context: Typeable a
bound by a pattern with constructor:
MkT :: forall a. Typeable a => a -> T,
in a pattern synonym declaration
at ../foo.hs:9:19-38
In other words, a successful match on the pattern
MkT (cast -> Just a)
does not provide the constraint (Typeable a0)
The type variable ‘a0’ is ambiguous
• In the declaration for pattern synonym ‘Cast’
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |