
#9151: Recursive default associated types don't kind-generalize properly -------------------------------------+------------------------------------ Reporter: goldfire | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Comment (by goldfire): Looking at the code for a bit, I don't think this is a trivial fix, after all. The problem is that associated type defaults are type-checked in the same group as the enclosing class. This means that GHC thinks that `TEHelper` and `PEnum` are mutually recursive. Thus, polymorphic recursion is not allowed between them, which is what we're asking for here. Instead, GHC should type check associated type defaults with other instances (in `tcInstDecls1`, likely), ''after'' all !TyClGroups are done being checked. With that line-up, `TEHelper` depends on `ToEnum` (part of the group with `PEnum`), but not the other way around. Unfortunately, this requires some moving plumbing around, and is not something I have time for at the moment. This all is not unlike how default method declarations have to be checked quite separately from the rest of a class. Anyway, archblob, if you want to keep playing, perhaps my comments above are helpful. I don't think this is ''hard'', but I originally thought the problem was due to a small oversight in the dependency analysis in the renamer. That's not the case, but it shouldn't be more than an hour or two of work. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9151#comment:9 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler