
#14254: The Binary instance for TypeRep smells a bit expensive -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: (none) Type: bug | Status: patch Priority: normal | Milestone: 8.4.1 Component: Compiler | Version: 8.2.1 Resolution: | Keywords: Typeable Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D3998, Wiki Page: | Phab:D4078, Phab:D4082 -------------------------------------+------------------------------------- Comment (by dfeuer): The attached test case (`Big.hs`) takes a third of a second to run and allocates half a gigabyte of memory. I went through several iterations of solutions, yes. The three that strike me as significant contenders at the moment are: 1. Phab:D4082, which is a pretty simple way to make sure deserialization is never too bad. This cuts total time to 0.029s and allocation to 17.7MB. 2. Phab:D4085, which caches `TypeRep`s of kinds in each `TrTyCon` and `TrApp` constructor. This fixes the deserialization problem and also ensures that `Data.Dynamic.dynApply` is cheap. This has really been my preferred approach all along. There is some extra laziness I'd like to get rid of that is not entirely trivial to eliminate; bgamari may well know how to do so. This cuts total time to 0.023s and allocation to 15MB. 3. Get rid of `typeRepKind`. This is definitely the most intrusive option, and I don't have a terribly clear sense of the consequences as yet, but I'm not sure we should dismiss it out of hand. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14254#comment:11 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler