
#14941: Switching direct type family application to EqPred (~) prevents inlining in code using vector (10x slowdown) -------------------------------------+------------------------------------- Reporter: nh2 | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): I think I see. Can you offer a small example? I think something like this is happening. We have {{{ ...(\(g :: Int ~ val). ...f (d |> Num g)... ) ... where d :: Num Int }}} Now, we can't float that call up to the definition of `f` because it mentions `g`. But we could in principle specialise `f` for `Num Int`, and then use that specialised version at the call. I'm not certain this is exactly what is happening for you. Hence wanting a test case. (You don't need to exhibit worse perf; just that a specialisation is created and used without the equality, but not with.) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14941#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler