
#11067: Spurious superclass cycle error with type equalities -------------------------------------+------------------------------------- Reporter: oerjan | Owner: Type: bug | Status: new Priority: normal | Milestone: 8.0.1 Component: Compiler (Type | Version: 7.10.2 checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by oerjan): To prevent the `Skolem` from leaking via pattern matching, I had to change `Forall` to use a type class instead. I first tried {{{#!hs class p (Skolem p) => Forall (p :: k -> Constraint) instance p (Skolem p) => Forall (p :: k -> Constraint) }}} etc., but this made the cycle errors come back, even more widespread than before (`Monoid2` no longer worked). However, adding a closed type family in the right spot again worked to soothe GHC: {{{#!hs type family Forall (p :: k -> Constraint) where Forall p = Forall_ p class p (Skolem p) => Forall_ (p :: k -> Constraint) instance p (Skolem p) => Forall_ (p :: k -> Constraint) }}} This seems a bit silly :P (Also, the last instance above should have a `Forall_`, but the `_` is invisible, at least in preview...) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11067#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler