
#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 simonpj): Yes, I did not fully understand the algorithm for adding extra edges. I think the specification is this: * We need an edge that makes a `TyClDecl` D depend on every `InstDecl` that does not depend (transitively) on D. It took me a few mins to write this down, and it does not look convenient to compute. If you are happy with the approach I described, can we try that?
Do you mean that if an instance appears in a cyclic group, the program will definitely be rejected?
Yes; a `data instance` can only depend on itself via promoted constructors, which we rule out for data type decls and should do for `data instances` too: {{{ data instance T Int = MkT (forall (a::Proxy 'MkT). ...blah...) }}} As you say, it need a decent error message. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12088#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler