converting multimethods to protocols