!7 replace SimpleStatements with MatchableRecords. replace Env with SimpleStatements. abstract sclass Prop implements IFieldsToList {} static withToList record Did$HappenBefore$(A event1, B event2) {} static withToList record WhenDid$Happen(O event) extends Prop {} static withToList record $HappensAtSecond$(A event, B y) extends Prop {} static cached L propClasses() { ret myNonAbstractClassesImplementing(Prop); } static cached LPair classesAndPatterns() { ret map(propClasses(), c -> pair(dollarsToStarsAndSplitCamelCase(shortClassName(c)), c)); } static O parseArg(S s) { ret isInteger(s) ? parseInt(s) : s; } static Prop parseProp(S s) { new Matches m; for (Class c, S pat : unpair classesAndPatterns()) { if (match(pat, s, m)) ret nuObject(c, map parseArg(m)); } null; } p-exp { for (S s : tlft([[ Did X happen before Y? when did Z happen ]])) print(s + " => " + parseProp(s)); }