Report required constraints when reporting the type of a hole
For the following code
module Test where
test :: String
test = show _h
GHC currently reports:
Found hole ‘_h’ with type: a0
Where: ‘a0’ is an ambiguous type variable
Relevant bindings include
test :: String (bound at /tmp/Test.hs:4:1)
In the first argument of ‘show’, namely ‘_h’
In the expression: show _h
In an equation for ‘test’: test = show _h
It correctly does not report the lack of a Show _a instance as a separate type error. However, it would be useful if the report containing the type of the hole would also contain the constraints that apply to its type. Something like:
Found hole ‘_h’ with type: a0
Where: ‘a0’ is an ambiguous type variable
Applicable constraints: Show a0
Relevant bindings include
test :: String (bound at /tmp/Test.hs:4:1)
In the first argument of ‘show’, namely ‘_h’
In the expression: show _h
In an equation for ‘test’: test = show _h
I am explicitly *not* suggesting to report a type like Show a0 => a0 for the hole, because that might mistakenly suggest that we are looking for a value of type forall a0. Show a0 => a0, which we are not. A possible alternative is to use an imaginary exists type like exists a0. Show a0 => a0 but that's probably just even more confusing.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.8.3 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | low |
| Resolution | Unresolved |
| Component | Compiler (Type checker) |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |