Type-based dispatch
Rock-paper-scissors:
class Paper { } class Scissor { } class Rock { } multi win(Paper $a, Rock $b) { 1 } multi win(Scissor $a, Paper $b) { 1 } multi win(Rock $a, Scissor $b) { 1 } multi win(Any $a, Any $b) { 0 } say win(Paper.new, Scissor.new); # 0 say win(Stone.new, Stone.new); # 0 say win(Paper.new, Stone.new); # 1