Program with missing instance accepted by compiler, program <<loops>>
The following program is accepted by the compiler even though (Fam Float) has no Super instance which is needed for Duper. testProg <<loops>> when run.
Even with the Super (Fam Float) instance added, testProg continues to <<loop>> unless the Duper (Fam a) constraint on Foo a is replaced by a Super (Fam a) constraint.
The problem seems to be an instance of #5751, but I'm not really sure.
{-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances #-}
data family Fam a
data instance Fam Float = FamFloat Float
class Super a where
testSup :: a -> Float
class Super a => Duper a where
testDup :: a -> Float
--class ( Super (Fam a) ) => Foo a where
class Duper (Fam a) => Foo a where
testFoo :: Fam a -> Float
instance Foo a => Duper (Fam a) where
testDup x = testFoo x + testSup x
--instance Super (Fam Float) where
-- testSup (FamFloat x) = x
instance Foo Float where
testFoo (FamFloat _) = 5.0
testProg :: Float
testProg = testDup (FamFloat 3.0)
Trac metadata
Trac field | Value |
---|---|
Version | 7.4.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |