Ticket #3460 (closed bug: fixed)

Opened 4 years ago

Last modified 3 years ago

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 Difficulty: Unknown
Test Case: indexed-types/should_compile/T3460 Blocked By:
Blocking: Related Tickets:

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

Changed 4 years ago by simonpj

  • owner set to chak
  • difficulty set to Unknown

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

Simon

Changed 4 years ago by igloo

  • milestone set to 6.12 branch

Changed 3 years ago by igloo

  • milestone changed from 6.12 branch to 6.12.3

Changed 3 years ago by igloo

  • priority changed from normal to low
  • milestone changed from 6.12.3 to 6.14.1

Changed 3 years ago by simonpj

  • status changed from new to closed
  • failure set to None/Unknown
  • resolution set to fixed
  • testcase set to indexed-types/should_compile/T3460

Now works in HEAD. Regression test added.

Note: See TracTickets for help on using tickets.