
#8095: TypeFamilies painfully slow -------------------------------------+------------------------------------- Reporter: MikeIzbicki | Owner: bgamari Type: bug | Status: new Priority: high | Milestone: 8.0.1 Component: Compiler (Type | Version: 7.6.3 checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: 5321 | Differential Rev(s): -------------------------------------+------------------------------------- Comment (by goldfire): Good observation about tracking free variables. But I think we'll have to be careful to avoid quadratic behavior. Suppose a call to `flatten_exact_fam_app_fully` creates a sequence of coercions with a quadratic size. This is exactly the case in comment:10. By the time we get to `setEvBind`, the quadratic-sized coercion is built. I thought for a moment laziness might save us, but the transformation from big coercion to `UnivCo` has to traverse the big coercion looking for coercion variables, forcing the thunks. And I think this problem might occur in places other than `flatten_exact_fam_app_fully`. One solution is to make the `mkTcXXX` functions in `TcEvidence` monadic. They could then consult the `DynFlags` to see how to proceed. At first blush, that looks terrible, but I think it's actually OK. I just searched for `mkTcTransCo`, and it is near a monad at every use site. Maybe other `mkTcXXX` functions are less well-placed, but I tend to doubt it. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8095#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler