!7 concept BInput > BEAObject { S text; toString { ret "[\*id*/] Input " + quote(text); } } concept BPattern > BEAObject { S pattern; toString { ret "[\*id*/] Pattern " + quote(pattern); } void reactWith(BInput input) { LS mapping = matchesToStringList(flexMatchIC_first(pattern, input.text)); if (mapping == null) ret; uniq BEAObject( type := "match", +input, pattern := this, +mapping); } } cmodule2 > DynCRUD_v2 { start-thread { uniq BInput(text := "UBports community delivers 'second-largest release of Ubuntu Touch ever'"); uniq BPattern(pattern := "* delivers *"); reactAll(); } void reactAll { for (BPattern p) for (BInput i) pcall { p.reactWith(i); } } }