
#14450: GHCi spins forever -------------------------------------+------------------------------------- Reporter: Iceland_jack | Owner: (none) Type: bug | Status: new Priority: high | Milestone: 8.4.1 Component: Compiler | Version: 8.2.1 Resolution: | Keywords: TypeInType, | PolyKinds Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by bgamari): Alright, with `master` `-ddump-tc-trace` is a bit more useful. While looping it appears to dump {{{ Start solver pipeline { work item = [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) (CTyEqCan) inerts = {Equalities: [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (TYPE q_a20F[tau:1] :: *) (CTyEqCan) [W] hole{a20K} {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) (CTyEqCan) [W] hole{a20M} {1}:: (k_aWv :: *) GHC.Prim.~# (TYPE q_a20F[tau:1] :: *) (CTyEqCan) Unsolved goals = 2} rest of worklist = WL {Eqs = [WD] hole{a20I} {0}:: (TYPE r_a20G[tau:1] :: *) GHC.Prim.~# (k_aWv :: *) (CNonCanonical)} runStage canonicalization { workitem = [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) (CTyEqCan) can_eq_nc False [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) nominal equality k_aWv k_aWv * * can_eq_nc False [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) nominal equality k_aWv k_aWv * * flatten { FM_FlattenAll k_aWv flatten } k_aWv flatten { FM_FlattenAll * flatten } * can_eq_nc True [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) nominal equality k_aWv k_aWv * * end stage canonicalization } runStage interact with inerts { workitem = [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) (CTyEqCan) Can't solve tyvar equality LHS: k_aWv :: * RHS: * :: * addInertEq { Adding new inert equality: [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) (CTyEqCan) Kick out, tv = k_aWv n-kicked = 1 kicked_out = WL {Eqs = [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (TYPE q_a20F[tau:1] :: *) (CTyEqCan)} Residual inerts = {Equalities: [W] hole{a20K} {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) (CTyEqCan) [W] hole{a20M} {1}:: (k_aWv :: *) GHC.Prim.~# (TYPE q_a20F[tau:1] :: *) (CTyEqCan) Unsolved goals = 2} addInertEq } end stage interact with inerts } Step 3424[l:1,d:1] Kept as inert: [D] _ {1}:: (k_aWv :: *) GHC.Prim.~# (* :: *) End solver pipeline (discharged) } ----------------------------- }}} In particular, unless I've misunderstood something, this strikes me as quite odd, {{{ Can't solve tyvar equality LHS: k_aWv :: * RHS: * :: * }}} There's no sign that `k_aWv` is a skolem so why is the solver not simply instantiating it at `*`? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14450#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler