
#14030: Implement the "Derive Lift instances for data types in template-haskell" proposal -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: RyanGlScott Type: task | Status: new Priority: normal | Milestone: 8.10.1 Component: Template Haskell | Version: 8.3 Resolution: | Keywords: deriving 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 RyanGlScott): To confirm my hunch that even generating code with bracket syntax would still be fragile, I tried compiling GHC 8.4.4 with 8.2.2 as the bootstrapping compiler again, but instead of attempting to derive a `Lift` instance for `Role`, I defined one manually using bracket syntax: {{{#!hs instance Lift Role where lift NominalR = [| NominalR |] ... }}} Alas, that also suffers from the same issues observed in comment:7: {{{ libraries/template-haskell/Language/Haskell/TH/Syntax.hs:2005:28: error: • Failed to load interface for ‘Language.Haskell.TH.Lib’ Use -v to see a list of the files searched for. • In the expression: [| NominalR |] In an equation for ‘lift’: lift NominalR = [| NominalR |] In the instance declaration for ‘Lift Role’ | 2005 | lift NominalR = [| NominalR |] | ^^^^^^^^^^^^^^ }}} This all seems horribly delicate. There has to be a way to ensure that subsequent changes to `template-haskell` won't break the build in similar ways, but I can't think of how to orchestrate this. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14030#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler