[GHC] #3460: Can't use superclass when type coercions are involved

GHC trac at galois.com
Mon Aug 24 17:45:46 EDT 2009


#3460: Can't use superclass when type coercions are involved
-----------------------------+----------------------------------------------
Reporter:  ryani             |          Owner:                         
    Type:  bug               |         Status:  new                    
Priority:  normal            |      Component:  Compiler (Type checker)
 Version:  6.10.4            |       Severity:  normal                 
Keywords:                    |       Testcase:                         
      Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple       
-----------------------------+----------------------------------------------
 GHC 6.10.4.

 {{{
 {-# LANGUAGE TypeFamilies, FlexibleContexts #-}
 module Coercion where

 class Nat n where
     toInt :: n -> Int

 class (Nat (Arity f)) => Model f where
     type Arity f

 ok :: Model f => f -> Arity f -> Int
 ok _ n = toInt n

 bug :: (Model f, Arity f ~ n) => f -> n -> Int
 bug _ n = toInt n
 }}}

 I expect that (Model f) brings (Nat (Arity f)) into scope, and that (Arity
 f ~ n) means we can derive (Nat n).  But the compiler disagrees.

 {{{
 Coercion.hs:14:10:
     Could not deduce (Nat n) from the context (Arity f ~ n, Model f)
       arising from a use of `toInt' at Coercion.hs:14:10-16
     Possible fix:
       add (Nat n) to the context of the type signature for `bug'
     In the expression: toInt n
     In the definition of `bug': bug _ n = toInt n
 }}}

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


More information about the Glasgow-haskell-bugs mailing list