addPrototype: #Predicate derivedFrom: {Cloneable}. _@(Root traits) predicate [True]. m@(Method traits) as: p@(Predicate traits) [| newP | newP: p derive. m asMethod: #predicate on: {newP traits}. newP ]. def@(Syntax MethodDefinition traits) predicated [| newDef | newDef: (def deepCopy: def parentScope). newDef statements: ([| :tests | def roles with: def inputVariables do: [| :role :var | role = #[Syntax Literal for: NoRole] ifFalse: [tests nextPut: `((Syntax LoadVariable from: var) `unquote predicate ifFalse: [^ resend])]] ] writingAs: {}) ; newDef statements. newDef ].