static Set applyWordTokRules(L rules, S s) { ret concatListsToCISet(map(rules, rule -> rule.matches(s) ? getStringEmits(rule) : null ); } static Set applyWordTokRules(L rules, Collection inputs, O... _) { Set out = cloneLinkedCISet(inputs); for unnull (S input : inputs) functionReturningList_transitiveHull_ciSet(func(S s) -> Collection { applyWordTokRules(rules, s) }, input, optPar seen(_, out)); ret out; }