Skip to content
  • Iustin Pop's avatar
    Optimise recursive Query filters · d277b075
    Iustin Pop authored
    
    
    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: default avatarIustin Pop <iustin@google.com>
    Reviewed-by: default avatarMichele Tartara <mtartara@google.com>
    d277b075