title: Swift: call non-generic function from generic?
body: <p>I have many hungry <code>FoodMonster</code>s who can <code>munch</code> many different types of food. The monsters have separate, overloaded methods to <code>munch</code> each type.</p>
  
  <p>I'd like to build a <code>MonsterPack</code> which manages many monsters and can feed them all any type of food a <code>FoodMonster</code> can <code>munch</code>. I’ve implemented it like this:</p>
  
  <pre><code>protocol Cookie {}
  protocol Lettuce {}
  
  protocol FoodMonster {
      func munch(Cookie)
      func munch(Lettuce)
  }
  
  struct MonsterPack {
  
      var monsters = [FoodMonster]()
  
      func feed&lt;T&gt;(food: T) {
          for monster in monsters {
              monster.munch(food)
          }
      }
  }
  </code></pre>
  
  <p>Unfortunately, this implementation of <code>MonsterPack.feed</code> doesn’t compile, since it’s generic and <code>FoodMonster</code>s cannot, as much as they might want to, <code>munch</code> any type of value.</p>
  
  <p>Is there any way I can define <code>feed</code> such that I can call it with any value that a <code>FoodMonster</code> <em>can</em> <code>munch</code>?</p>