
#16322: "deriving newtype instance" generates an infinite loop -------------------------------------+------------------------------------- Reporter: paf31 | Owner: (none) Type: bug | Status: infoneeded Priority: normal | Milestone: Component: Compiler | Version: 8.6.3 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 paf31): This loops in the REPL: {{{ :set -XDerivingStrategies :set -XFlexibleInstances :set -XFunctionalDependencies :set -XGeneralizedNewtypeDeriving :set -XMultiParamTypeClasses :set -XStandaloneDeriving :set -XUndecidableInstances import Data.Proxy class C a b | a -> b, b -> a where c :: Proxy a -> Int instance C Int Int where c _ = 1 newtype X a b = X { unX :: b } deriving newtype instance C a b => C (X String a) (X String b) }}} when I evaluate {{{
c (Proxy :: Proxy (X String Int)) }}}
Most likely `UndecidableInstances` is the culprit here, since I can't derive the instance otherwise, but it seems like it should be possible to derive anyway. `-ddump-deriv` shows this: {{{ Derived class instances: instance Ghci1.C a b => Ghci1.C (Ghci3.X GHC.Base.String a) (Ghci3.X GHC.Base.String b) where Ghci1.c = GHC.Prim.coerce @((Data.Proxy.Proxy (Ghci3.X GHC.Base.String a_a1Ei) :: TYPE GHC.Types.LiftedRep) -> GHC.Types.Int) @((Data.Proxy.Proxy (Ghci3.X GHC.Base.String a_a1Ei) :: TYPE GHC.Types.LiftedRep) -> GHC.Types.Int) Ghci1.c :: (Data.Proxy.Proxy (Ghci3.X GHC.Base.String a_a1Ei) :: TYPE GHC.Types.LiftedRep) -> GHC.Types.Int }}} which identifies the issue: GHC is not coercing away the newtype, but deriving an identity coercion. Apologies again if I'm missing something obvious here. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16322#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler