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