Ticket #6161 (closed bug: fixed)
Program with missing instance accepted by compiler, program <<loops>>
Description
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)
Change History
Note: See
TracTickets for help on using
tickets.
