static Set applyAttractors_es(L attractors, ES s) { ret concatListsToCISet_es(map(attractors, attractor -> attractor.matches_public(s!) ? getStringEmits_es(attractor) : null ); } static Set applyAttractors_es(L attractors, Collection inputs) { Set out = cloneLinkedCISet_es(inputs); for unnull (ES input : inputs) functionReturningList_transitiveHull_ciSet_es(func(ES s) -> Collection { applyAttractors_es(attractors, s) }, input, seen := out); ret out; }