Revision d277b075
ID | d277b075c8d3784896ff4d252a137fd7f5905990 |
Optimise recursive Query filters
Currently, the And and Or filters use very nice code, e.g. in case of
OrFilter:
any id <$> mapM evaluateFilter flts
However, looking at the memory profiles shows that application of
any/id to monadic values via '<$>' does not work nicely, losing the
'early' success property. This results in too much memory being used
for thunks in monadic sequencing.
Rather than trying to add more strictness (not sure exactly how, TBH),
switching these to explicit recursion solves the problem, since we
take the 'early' exit problem in our hands and we are explicit about
it.
Memory usage in case of big (e.g. 1000 'Or' elements) is reduced
significantly, and thus also the runtime.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Michele Tartara <mtartara@google.com>
Files
- added
- modified
- copied
- renamed
- deleted