arg, left, and right_transform do the obvious things; misc clean-up using proto::matches to implement is_marker and is_repeater predicates