exprIsCheap was already making record selection look cheap, esp for
dictionary selection; e.g.
(==) dEq
The idea is to allow those record selections to migrate inside a
lambda, because on the whole it's more expensive to share than
repeat them.
But sometimes dictionary selection is nested; e.g.
(==) ($p1Num dNum)
This turned out to make a (fragile) rewrite rule fire a little
more robustly, but it seems like a good idea in any case.
This patch makes nested record selections also look cheap.
-- to bother to check the number of args
--------------
-- to bother to check the number of args
--------------
- go_sel [arg] = exprIsTrivial arg -- I'm experimenting with making record selection
+ go_sel [arg] = exprIsCheap arg -- I'm experimenting with making record selection
go_sel other = False -- look cheap, so we will substitute it inside a
-- lambda. Particularly for dictionary field selection.
-- BUT: Take care with (sel d x)! The (sel d) might be cheap, but
go_sel other = False -- look cheap, so we will substitute it inside a
-- lambda. Particularly for dictionary field selection.
-- BUT: Take care with (sel d x)! The (sel d) might be cheap, but