[GHC] #15039: Bizarre pretty-printing of inferred Coercible constraint in partial type signature

GHC ghc-devs at haskell.org
Mon Apr 16 02:37:56 UTC 2018


#15039: Bizarre pretty-printing of inferred Coercible constraint in partial type
signature
-------------------------------------+-------------------------------------
           Reporter:  RyanGlScott    |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:  8.6.1
          Component:  Compiler       |           Version:  8.4.1
  (Type checker)                     |
           Keywords:                 |  Operating System:  Unknown/Multiple
  PartialTypeSignatures              |
       Architecture:                 |   Type of failure:  Poor/confusing
  Unknown/Multiple                   |  error message
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 Consider the following GHCi session:

 {{{
 $ ghci
 GHCi, version 8.4.1: http://www.haskell.org/ghc/  :? for help
 Loaded GHCi configuration from /home/rgscott/.ghci
 λ> import Data.Type.Coercion
 λ> foo :: _ => Coercion a b; foo = Coercion

 <interactive>:2:8: error:
     • Found type wildcard ‘_’
         standing for ‘Coercible a b :: TYPE ('GHC.Types.TupleRep '[])’
       Where: ‘a’, ‘b’ are rigid type variables bound by
                the inferred type of foo :: Coercible a b => Coercion a b
                at <interactive>:2:27-40
       To use the inferred type, enable PartialTypeSignatures
     • In the type signature: foo :: _ => Coercion a b
 λ> :set -fprint-explicit-kinds
 λ> foo :: _ => Coercion a b; foo = Coercion

 <interactive>:4:8: error:
     • Found type wildcard ‘_’
         standing for ‘(a :: *) ~~ (b :: *) :: TYPE
                                                 ('GHC.Types.TupleRep ('[]
 GHC.Types.RuntimeRep))’
       Where: ‘a’, ‘b’ are rigid type variables bound by
                the inferred type of
                  foo :: ((a :: *) ~~ (b :: *)) => Coercion * a b
                at <interactive>:4:27-40
       To use the inferred type, enable PartialTypeSignatures
     • In the type signature: foo :: _ => Coercion a b
 }}}

 There are two things quite strange about this:

 1. In both error messages, GHC claims that `Coercible a b`/`a ~~ b` has
 kind `TYPE (TupleRep '[])`. This is wrong, and should be `Coercible`.
 2. For some reason, enabling `-fprint-explicit-kinds` causes the inferred
 constraint to be `(~~)` instead of `Coercible`, which is just plain wrong.

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


More information about the ghc-tickets mailing list