
#11028: Refactor ConDecl -------------------------------------+------------------------------------- Reporter: simonpj | Owner: alanz Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by alanz): At the moment `kcConDecl` is defined as {{{#!hs kcConDecl (ConDecl { con_names = names, con_qvars = ex_tvs , con_cxt = ex_ctxt, con_details = details , con_res = res }) = addErrCtxt (dataConCtxtName names) $ -- the 'False' says that the existentials don't have a CUSK, as the -- concept doesn't really apply here. We just need to bring the variables -- into scope! do { _ <- kcHsTyVarBndrs False ex_tvs $ do { _ <- tcHsContext ex_ctxt ; mapM_ (tcHsOpenType . getBangType) (hsConDeclArgTys details) ; _ <- tcConRes res ; return (panic "kcConDecl", ()) } ; return () } }}} I am working on the `ConDeclGADT` case, and have {{{#!hs kcConDecl (ConDeclGADT { con_name = name , con_type = HsIB { hsib_kvs = ex_kvs , hsib_tvs = ex_tvs , hsib_body = res_ty} }) = addErrCtxt (dataConCtxtName [name]) $ -- the 'False' says that the existentials don't have a CUSK, as the -- concept doesn't really apply here. We just need to bring the variables -- into scope! do { _ <- kcHsTyVarBndrs False ex_tvs $ ..... ; return () } }}} It is not clear to me whether `kcHsTyVarBndrs False ex_tvs` should be checking `ex_kvs`, `ex_tvs`, or both. I suspect `ex_kvs` only. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11028#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler