[GHC] #9479: Report required constraints when reporting the type of a hole

GHC ghc-devs at haskell.org
Wed Aug 20 07:57:58 UTC 2014


#9479: Report required constraints when reporting the type of a hole
-------------------------------------+-------------------------------------
       Reporter:  dominiquedevriese  |                   Owner:
           Type:  feature request    |                  Status:  new
       Priority:  low                |               Milestone:
      Component:  Compiler (Type     |                 Version:  7.8.3
  checker)                           |        Operating System:
       Keywords:  holes              |  Unknown/Multiple
   Architecture:  Unknown/Multiple   |         Type of failure:
     Difficulty:  Unknown            |  None/Unknown
     Blocked By:                     |               Test Case:
Related Tickets:                     |                Blocking:
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------
 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.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9479>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list