title: Multiple type parameters in type class
body: <p>I want to use type class to design convert interface and codes are as below:</p>
  
  <pre><code>case class Kilograms(value: Double)
  
  case class Pounds(value: Double)
  
  trait Convert[T, U] {
    def convert(input: T): U
  }
  
  object Convert {
    def apply[T:Convert, U:Convert] = implicitly[Convert[T,U]]
    def covert[T, U](input: T)(implicit c: Convert[T, U]): U = c.convert(input)
  
    implicit object kilogramsToPounds extends Convert[Kilograms, Pounds] {
        override def convert(input: Kilograms): Pounds = Pounds(input.value *   2.20462)
      }
  
    implicit object poundsToKilograms extends Convert[Pounds, Kilograms] {
        override def convert(input: Pounds): Kilograms = Kilograms(input.value / 2.20462)
      }
  }
  </code></pre>
  
  <p>But compile error:</p>
  
  <pre><code>Error: wrong number of type arguments for A$A95.this.Convert, should be 2
   def apply[T:Convert, U:Convert] = implicitly[Convert[T,U]]
  
   Error: could not find implicit value for parameter e: A$A95.this.Convert[T,U]
    def apply[T:Convert, U:Convert] = implicitly[Convert[T,U]]
  
  Error: not enough arguments for method implicitly: (implicit e:   A$A95.this.Convert[T,U])A$A95.this.Convert[T,U].
  Unspecified value parameter e.
     def apply[T:Convert, U:Convert] = implicitly[Convert[T,U]]
  </code></pre>
  
  <p>If I change <code>def apply[T:Convert, U:Convert] = implicitly[Convert[T,U]]</code> into <code>def apply[T, U](implicit c: Convert[T, U]): Convert[T, U] = c</code>, no compile error!!!</p>
  
  <p>I would like to know what's going on?
  Also, I look up some information, context bound is restricted with single type parameter(?)
  If I want to implement multiple type parameter type class, how should I do?</p>