
#14951: SpecContsr needs two runs when one should suffice -------------------------------------+------------------------------------- Reporter: nomeata | Owner: (none) Type: task | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.2 Resolution: | Keywords: SpecConstr Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #14844 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by sgraf):
What do you mean with worse?
Well, assuming we would specialise `foo` for `foo s f (x,y)` without calling a specialised `l`, then we would just defer constructing the pair. So, you're right: not actually worse at all, but unnecessary code bloat, still. Come to think of it, have you tried to weave in [https://hackage.haskell.org/package/ghc-prim-0.5.1.1/docs/GHC- Types.html#t:SPEC GHC.Types.SPEC] into `foo`s signature instead? That essentially makes !SpecConstr forget to find matching `ArgOcc`s and blindly specialises for call sites and is probably what would help here, too. Probably at the expense of even worse code bloat when there are many different call patterns, but there is only one in your specific case. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14951#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler