Type inference in presence of pattern matching on GADTs
This small example
{-# LANGUAGE GADTs #-}
data G a where
I :: G Integer
f g = case g of I -> ()
yields
• Couldn't match expected type ‘p’ with actual type ‘()’
‘p’ is untouchable
inside the constraints: a ~ Integer
bound by a pattern with constructor: I :: G Integer,
in a case alternative
at gadtsInference.hs:6:17
‘p’ is a rigid type variable bound by
the inferred type of f :: G a -> p
at gadtsInference.hs:6:1-23
Possible fix: add a type signature for ‘f’
• In the expression: ()
In a case alternative: I -> ()
In the expression: case g of { I -> () }
• Relevant bindings include
f :: G a -> p (bound at gadtsInference.hs:6:1)
|
6 | f g = case g of I -> ()
| ^^
Without providing the type annotation for f f :: G a -> () GHC cannot
infer the correct result type.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.6.3 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | low |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |