Skip to content

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:

  1. be accepted by the compiler even in cases where B (Additive a) is not derivable.
  2. 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.

Edited by Simon Peyton Jones
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information