[GHC] #9692: Template Haskell reification for Data Families is buggy?
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.3 Keywords: TemplateHaskell | Operating System: MacOS X Architecture: Unknown/Multiple | Type of failure: Difficulty: Unknown | None/Unknown Blocked By: | Test Case: Related Tickets: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- I have found an example where I think that the TH reification for data/newtype families is incorrect, in that if forgets non-instantiated type variables in instance declarations. For the attached example, it will infer the Info: {{{#!hs FamilyI (FamilyD DataFam TyFamReifyDefs.F [PlainTV a_1627399879,PlainTV b_1627399880] (Just StarT)) [DataInstD [] TyFamReifyDefs.F [ConT GHC.Types.Int] [NormalC TyFamReifyDefs.FInt [(NotStrict,VarT x_1627399881)]] []] }}} Note how the variable x is not declared in the body of the DataInstD. Since it does not need to have the same name as the family-declared variable, substituing is non-trivial this way... -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.3 Resolution: | Keywords: TemplateHaskell Operating System: MacOS X | Architecture: Unknown/Multiple Type of failure: | Difficulty: Unknown None/Unknown | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Description changed by hpacheco: Old description:
I have found an example where I think that the TH reification for data/newtype families is incorrect, in that if forgets non-instantiated type variables in instance declarations.
For the attached example, it will infer the Info:
{{{#!hs FamilyI (FamilyD DataFam TyFamReifyDefs.F [PlainTV a_1627399879,PlainTV b_1627399880] (Just StarT)) [DataInstD [] TyFamReifyDefs.F [ConT GHC.Types.Int] [NormalC TyFamReifyDefs.FInt [(NotStrict,VarT x_1627399881)]] []] }}}
Note how the variable x is not declared in the body of the DataInstD. Since it does not need to have the same name as the family-declared variable, substituing is non-trivial this way...
New description: I have found an example where I think that the TH reification for data/newtype families is incorrect, in that if forgets non-bound type variables in instance declarations. For the attached example, it will infer the Info: {{{#!hs FamilyI (FamilyD DataFam TyFamReifyDefs.F [PlainTV a_1627399879,PlainTV b_1627399880] (Just StarT)) [DataInstD [] TyFamReifyDefs.F [ConT GHC.Types.Int] [NormalC TyFamReifyDefs.FInt [(NotStrict,VarT x_1627399881)]] []] }}} Note how the variable x is not declared in the body of the DataInstD. Since it does not need to have the same name as the family-declared variable, substituting is non-trivial this way... -- -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Template | Version: 7.8.3 Haskell | Keywords: TemplateHaskell Resolution: | Architecture: Unknown/Multiple Operating System: MacOS X | Difficulty: Easy (less than 1 Type of failure: | hour) None/Unknown | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Changes (by hpacheco): * difficulty: Unknown => Easy (less than 1 hour) * component: Compiler => Template Haskell -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692#comment:2> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: goldfire Type: bug | Status: new Priority: normal | Milestone: Component: Template | Version: 7.8.3 Haskell | Keywords: TemplateHaskell Resolution: | Architecture: Unknown/Multiple Operating System: MacOS X | Difficulty: Easy (less than 1 Type of failure: | hour) None/Unknown | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Changes (by goldfire): * owner: => goldfire Comment: This gets a bit worse: reifying data families also includes kind parameters. Should be easy enough to fix, though... -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692#comment:3> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: goldfire Type: bug | Status: new Priority: normal | Milestone: Component: Template | Version: 7.8.3 Haskell | Keywords: TemplateHaskell Resolution: | Architecture: Unknown/Multiple Operating System: MacOS X | Difficulty: Easy (less than 1 Type of failure: | hour) None/Unknown | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: Phab:D355 | -------------------------------------+------------------------------------- Changes (by thoughtpolice): * differential: => Phab:D355 -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692#comment:4> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: goldfire Type: bug | Status: new Priority: normal | Milestone: Component: Template | Version: 7.8.3 Haskell | Keywords: TemplateHaskell Resolution: | Architecture: Unknown/Multiple Operating System: MacOS X | Difficulty: Easy (less than 1 Type of failure: | hour) None/Unknown | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: Phab:D355 | -------------------------------------+------------------------------------- Comment (by Richard Eisenberg <eir@…>): In [changeset:"e319d6d2704edc2696f47409f85f4d4ce58a6cc4/ghc"]: {{{ #!CommitTicketReference repository="ghc" revision="e319d6d2704edc2696f47409f85f4d4ce58a6cc4" Reify data family instances correctly. Summary: Fix #9692. The reifier didn't account for the possibility that data/newtype instances are sometimes eta-reduced. It now eta-expands as necessary. Test Plan: th/T9692 Reviewers: simonpj, austin Subscribers: thomie, carter, ezyang, simonmar Differential Revision: https://phabricator.haskell.org/D355 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692#comment:6> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: goldfire Type: bug | Status: new Priority: normal | Milestone: Component: Template | Version: 7.8.3 Haskell | Keywords: TemplateHaskell Resolution: | Architecture: Unknown/Multiple Operating System: MacOS X | Difficulty: Easy (less than 1 Type of failure: | hour) None/Unknown | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: Phab:D355 | -------------------------------------+------------------------------------- Comment (by Richard Eisenberg <eir@…>): In [changeset:"f681c3274c4481ab549508fa346892023bf9d9bb/ghc"]: {{{ #!CommitTicketReference repository="ghc" revision="f681c3274c4481ab549508fa346892023bf9d9bb" Test #9692 in th/T9692 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692#comment:5> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: goldfire Type: bug | Status: closed Priority: normal | Milestone: Component: Template | Version: 7.8.3 Haskell | Keywords: TemplateHaskell Resolution: fixed | Architecture: Unknown/Multiple Operating System: MacOS X | Difficulty: Easy (less than 1 Type of failure: | hour) None/Unknown | Blocked By: Test Case: th/T9692 | Related Tickets: Blocking: | Differential Revisions: Phab:D355 | -------------------------------------+------------------------------------- Changes (by goldfire): * status: new => closed * testcase: => th/T9692 * resolution: => fixed -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692#comment:7> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#9692: Template Haskell reification for Data Families is buggy? -------------------------------------+------------------------------------- Reporter: hpacheco | Owner: goldfire Type: bug | Status: closed Priority: normal | Milestone: Component: Template Haskell | Version: 7.8.3 Resolution: fixed | Keywords: | TemplateHaskell Operating System: MacOS X | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: th/T9692 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D355 -------------------------------------+------------------------------------- Comment (by Ryan Scott <ryan.gl.scott@…>): In [changeset:"63a817074a8d49798bfd46a6545906fff143e924/ghc" 63a81707/ghc]: {{{ #!CommitTicketReference repository="ghc" revision="63a817074a8d49798bfd46a6545906fff143e924" Fix #15845 by defining etaExpandFamInstLHS and using it Summary: Both #9692 and #14179 were caused by GHC being careless about using eta-reduced data family instance axioms. Each of those tickets were fixed by manually whipping up some code to eta-expand the axioms. The same sort of issue has now caused #15845, so I figured it was high time to factor out the code that each of these fixes have in common. This patch introduces the `etaExpandFamInstLHS` function, which takes a family instance's type variables, LHS types, and RHS type, and returns type variables and LHS types that have been eta-expanded if necessary, in the case of a data family instance. (If it's a type family instance, `etaExpandFamInstLHS` just returns the supplied type variables and LHS types unchanged). Along the way, I noticed that many references to `Note [Eta reduction for data families]` (in `FamInstEnv`) had slightly bitrotted (they either referred to a somewhat different name, or claimed that the Note lived in a different module), so I took the liberty of cleaning those up. Test Plan: make test TEST="T9692 T15845" Reviewers: goldfire, bgamari Reviewed By: goldfire Subscribers: rwbarton, carter GHC Trac Issues: #15845 Differential Revision: https://phabricator.haskell.org/D5294 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9692#comment:8> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
participants (1)
-
GHC