!7 replace Var with ValuelessVar. replace VarMap with Map. replace SimpleStatements with MatchableRecords. abstract sclass Prop implements IFieldsToList {} static withToList record WhenDid$Happen(O event) extends Prop {} static withToList record $HappensAtSecond$(A event, B y) extends Prop {} static O answer(O p, SimpleStatements statements) { if p is WhenDid$Happen(O event) { ret statements.fulfillVariable(var -> $HappensAtSecond$(event, var)); } null; } p-exp { SimpleStatements statements = new( $HappensAtSecond$("stuff", 10), $HappensAtSecond$("more stuff", 20) ); assertEqualsVerbose(10, answer(print(WhenDid$Happen("stuff")), statements)); assertEqualsVerbose(20, answer(print(WhenDid$Happen("more stuff")), statements)); assertEqualsVerbose(null, answer(print(WhenDid$Happen("something else")), statements)); }