
#10592: Allow cycles in class declarations -------------------------------------+------------------------------------- Reporter: MikeIzbicki | Owner: Type: feature request | Status: infoneeded Priority: normal | Milestone: Component: Compiler (Type | Version: 7.10.1 checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): OK I've got it. Patch coming. Your example differs from Edward's in #10318, because you really do have an infinite stack of superclasses. * `Eq a` has `Boolean (Logic a)` as a superclass * `Boolean a` ultimately has `Eq a` as a superclass So we get `Eq (Logic a)`, `Eq (Logic (Logic a))`, etc forever. Do you really mean that. Edward cut this off by adding a constraint {{{ Frac (Frac a) ~ Frac a }}} Can you do something like that for `Logic`? If you really really do have infinitely many superclasses then unsolved constraints will indeed hit the iteration limit as you found... GHC keeps adding superclasses in the hope of finding one that works, but there are infinitely many of them (I fixed the error message to give the right flag name, but it doesn't solve the problem). I don't see any way to solve this without you giving GHC some way to bound the tower as Edward did. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10592#comment:14 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler