Opened 10 years ago

Closed 9 years ago

#3460 closed bug (fixed)

Can't use superclass when type coercions are involved

Reported by: ryani Owned by: chak
Priority: low Milestone: 7.0.1
Component: Compiler (Type checker) Version: 6.10.4
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case: indexed-types/should_compile/T3460
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:

Description

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

Change History (5)

comment:1 Changed 10 years ago by simonpj

difficulty: Unknown
Owner: set to chak

Yes, that does look like a bug. Thank you.

Simon

comment:2 Changed 10 years ago by igloo

Milestone: 6.12 branch

comment:3 Changed 9 years ago by igloo

Milestone: 6.12 branch6.12.3

comment:4 Changed 9 years ago by igloo

Milestone: 6.12.36.14.1
Priority: normallow

comment:5 Changed 9 years ago by simonpj

Resolution: fixed
Status: newclosed
Test Case: indexed-types/should_compile/T3460
Type of failure: None/Unknown

Now works in HEAD. Regression test added.

Note: See TracTickets for help on using tickets.