
#12088: Promote data family instance constructors -------------------------------------+------------------------------------- Reporter: alexvieth | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: 8.1 checker) | Resolution: | Keywords: TypeInType Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: #11348 | Differential Rev(s): Phab:D2272 Wiki Page: | -------------------------------------+------------------------------------- Comment (by alexvieth): I'm still trying to grok the latest comments but in the meantime I want to offer an idea similar to this one:
Another idea: when we have a group of type instance decls, suppose we kind check them, but do not yet solve the kind equalities that arise; but add them to the instance environment anyway. Now solve all the kind equalities. In our example, we'd add both instances for Open1 and Open2 before trying to solve their kind equalities. Seems a bit scary somehow.
This doesn't seem scary to me. What if we don't even kind check them before adding their equalities to the environment? Just assume they're well-kinded while checking the other declarations. This way, we don't have to make sure the open type family instances come as early as possible in the order. 1. Do SCC analysis on all declarations except for open type family instances, to give ordered `TyClGroup`s and the set of those instances (in source file order). 2. Before checking the `TyClGroup`s, put all equalities arising from the open type family instances into the environment (assume for now that they're well-kinded). 3. Check the `TyClGroup`s in order as usual. 4. Check the open type family instances (verifying or falsifying the assumption in 2). Maybe this is nonsense. Would it be possible to make and use a coercion axiom without kind checking the lhs and rhs types? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12088#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler