
#12860: GeneralizedNewtypeDeriving + MultiParamTypeClasses sends typechecker into an infinite loop -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: 8.0.1 checker) | Keywords: FunDeps, Resolution: | deriving Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): Hm. I tried to use `checkValidInstance`, but there's a big problem: its type signature is not very amenable to being put into `simplifyInstanceContexts`. It is [http://git.haskell.org/ghc.git/blob/fea04defa64871caab6339ff3fc5511a272f37c7... currently]: {{{#!hs checkValidInstance :: UserTypeCtxt -> LHsSigType GhcRn -> Type -> TcM ([TyVar], ThetaType, Class, [Type]) }}} There are two awkward things about this: 1. It expects an `LHsSigType GhcRn` argument, but this isn't available in `simplifyInstanceContexts`. (However, `checkValidInstance` only uses this to get a `SrcSpan`, so perhaps this can be changed to just be a `SrcSpan` argument.) 2. A more awkward sticking point is that `checkValidInstance` expects a `Type` as an argument. This is because it then proceeds to split it with `tcSplitSigmaTy` (and returns the resulting tyvars and theta). However, in `simplifyInstanceContexts`, our instance type is already "pre-split" (that is, we already have the tyvars, theta, class, and class argument types lying around). What's worse, I can't just change the `Type` argument and replace it with the constituent `[TyVar]`, `ThetaType`, etc., since `checkValidInstance` passes that `Type` wholesale to `checkAmbiguity`. So I don't know what to do here. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12860#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler