[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