
#13915: GHC 8.2 regression: "Can't find interface-file declaration" for promoted data family instance -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: (none) Type: bug | Status: new Priority: high | Milestone: 8.2.1 Component: Compiler | Version: 8.2.1-rc2 Keywords: TypeInType, | Operating System: Unknown/Multiple TypeFamilies | Architecture: | Type of failure: GHC rejects Unknown/Multiple | valid program Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- Due to #12088, you can't define a data family instance and promote it in the same module. One could, up until GHC 8.2, work around this using (somewhat obscure) wisdom: define the data family instance in a separate module from where it's promoted. For example, `Bug` typechecks in GHC 8.0.1 and 8.0.2: {{{#!hs {-# LANGUAGE TypeFamilies #-} module Foo where data family T a data instance T Int = MkT }}} {{{#!hs {-# LANGUAGE TypeInType #-} module Bug where import Foo data Proxy (a :: k) data S = MkS (Proxy 'MkT) }}} However, this stopped typechecking in GHC 8.2: {{{ $ /opt/ghc/8.2.1/bin/ghci Bug.hs GHCi, version 8.2.0.20170623: http://www.haskell.org/ghc/ :? for help Loaded GHCi configuration from /home/rgscott/.ghci [1 of 2] Compiling Foo ( Foo.hs, interpreted ) [2 of 2] Compiling Bug ( Bug.hs, interpreted ) Bug.hs:1:1: error: Can't find interface-file declaration for variable Foo.$tc'MkT Probable cause: bug in .hi-boot file, or inconsistent .hi file Use -ddump-if-trace to get an idea of which file caused the error | 1 | {-# LANGUAGE TypeInType #-} | ^ }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13915 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler