Hi > I think I've figured out what is going on: this technique simply > doesn't work as well as we might hope it would! Here's why: > > While you ignore the explicit parameter, in practice there's an > implicit dictionary parameter that is actually being used in res > (Data/Typeable). At first sight, that might sound okay -we want a caf per > type after all- but what happens is that we get *a caf per dictionary > parameter* instead.
My tests show that is wrong. Inserting a trace around the type map creation shows it is only called twice, with Company/Salary and Salary/Salary. Profiling shows much the same result. > Try this variation of the Paradise benchmark data: > > genCom :: Company > genCom = C $ take 100000 $ cycle > [D "Research" laemmel [PU joost, PU marlow], > D "Strategy" blair []] I did, and Uniplate underperforms. I'm not entirely sure why this is yet, but my thoughts are kind of drifting towards a space leak, but I do need to track it down. It seems as you increase the size of the expressions the PlateData technique performs worse at queries. > Am I on the right track here? My guess is no - I think in Uniplate the CAF inside an instance trick works. But you have certainly found _something_ ... Thanks Neil _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
