steal example from MooseX::MultiMethods