Cyclic Type Class Hierarchy Produces <<loop>>
If there is a cyclic class hierarchy like
class B a => Semigroup a where ...[[BR]]
class Semigroup (Additive a) => Ring a where ...[[BR]]
instance Ring a => Semigroup (Additive a) where ...[[BR]]
then uses of B's methods on (Additive a)
in the method implementations of the
third declaration instance Ring a => Semigroup (Additive a)
will:
- be accepted by the compiler even in cases where
B (Additive a)
is not derivable. - result in <<loop>>.
The attached program prints <<loop>> when compiled with GHC-7.2.1 or newer but prints 1234567890 when compiled with GHC-7.0.4 or older. I haven't had time to try out any revisions in between those two, but I did check that HEAD produces <<loop>> as well.