!7 srecord Superposition(Cl options) { *(O... options) { this.options = asList(options); } } srecord Sequence(L steps) { *(O... steps) { this.steps = asList(steps); } } asclass GrammarClass {} sclass Statement > GrammarClass {} srecord grab(O what) {} // what: string or a GrammarClass cprint { start-thread { Superposition main = Superposition( Sequence( grab("I"), grab("think"), Superposition( Sequence( grab("that"), grab(Statement) ), grab(Statement) ) ), Sequence( grab("Do"), grab("you"), grab("think"), grab("that"), grab(Statement), grab("?") ), grab(Statement) ); printIndentedStruct(main); } }