panic when compiling recursive function on type changing continuations
## Summary when compiling a certain function i get the following error ``` <no location info>: error: panic! (the 'impossible' happened) GHC version 9.4.2: lookupIdSubst $dApplicative_aKX InScope {p_aKS $creturn_aLA} Call stack: CallStack (from HasCallStack): callStackDoc, called at compiler/GHC/Utils/Panic.hs:182:37 in ghc:GHC.Utils.Panic pprPanic, called at compiler/GHC/Core/Subst.hs:260:17 in ghc:GHC.Core.Subst Please report this as a GHC bug: https://www.haskell.org/ghc/reportabug ``` ## Steps to reproduce paste the following code in a source file and try to compile it ```haskell newtype Cont o i a = Cont {runCont ::(a -> i) -> o } t1:: Cont (i2 -> o) i1 a -> Cont o i2 (a -> i1) t1 c = Cont $ \ati1tti2 -> (runCont c) (ati1tti2 $ \a -> evalCont (t1 c) >>== \ati1 -> return ati1 a ) evalCont:: Cont o a a -> o evalCont c = (runCont c)id instance Monad (Cont p p) where return a = Cont ($ a) (>>=) = (>>==) class PMonad m where (>>==):: m p q a -> (a -> m q r b) -> m p r b instance PMonad Cont where (Cont cont) >>== afmb = Cont $ \bti -> cont $ \a -> (runCont . afmb) a bti main:: IO () main = putStrLn "bug" ``` for some reason the code doesn't type check if i remove the class and define >>== as a top level function. the t1 function is the problematic one. i do believe it shouldn't type check at all as evalCont is applied to (t1 c) which is of type Cont o i2 (a -> i1) which most definitely isn't of type Cont o a a for all types o i2 a and i1 ## Expected behavior the code should compile normally or it should report a compile error not panic ## Environment * GHC version used: 9.4.2 Optional: * Operating System: Linux * System Architecture:
issue