#6117: Cyclic Type Class Hierarchy Produces <<loop>>
----------------------------------------+-----------------------------------
    Reporter:  jun0                     |       Owner:  simonpj                 
   
        Type:  bug                      |      Status:  new                     
   
    Priority:  normal                   |   Milestone:  7.8.1                   
   
   Component:  Compiler (Type checker)  |     Version:  7.4.1                   
   
    Keywords:                           |          Os:  Linux                   
   
Architecture:  Unknown/Multiple         |     Failure:  Incorrect result at 
runtime
  Difficulty:  Unknown                  |    Testcase:  T6117                   
   
   Blockedby:                           |    Blocking:                          
   
     Related:                           |  
----------------------------------------+-----------------------------------
Description changed by simonpj:

Old description:

> 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.

New description:

 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.

--

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/6117#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to