title: problem with implicit ambiguity between my method and conforms in Predef
body: <p>The following code, which is taken from Apocalisp's excellent blog series: 
  <a href="http://apocalisp.wordpress.com/2010/06/08/type-level-programming-in-scala/" rel="nofollow">Type level programming in scala</a> , and modified for an implicit parsing scenario. However, this does not compile, with the following message:</p>
  
  <pre><code>error: ambiguous implicit values:
  both method hParseNil in object HApplyOps of type =&gt; (com.mystuff.bigdata.commons.collections.hlist.HNil) =&gt; com.mystuff.bigdata.commons.collections.hlist.HNil
  and method conforms in object Predef of type [A]&lt;:&lt;[A,A]
  match expected type (com.mystuff.bigdata.commons.collections.hlist.HNil) =&gt; com.amadesa.bigdata.commons.collections.hlist.HNil
  val l = hparse[HNil,HNil](HNil)
  </code></pre>
  
  <p>Can someone please explain why this happens, and if it's fixable?</p>
  
  <pre><code>sealed trait HList
  
  final case class HCons[H, T &lt;: HList](head: H, tail: T) extends HList {
    def :+:[T](v: T) = HCons(v, this)
  }
  
  sealed class HNil extends HList {
    def :+:[T](v: T) = HCons(v, this)
  }
  
  object HNil extends HNil
  
  // aliases for building HList types and for pattern matching
  object HList {
    type :+:[H, T &lt;: HList] = HCons[H, T]
    val :+: = HCons
  
  }
  
  object HApplyOps
  {
    import HList.:+:
  
  
  
    implicit def hParseNil: HNil =&gt; HNil = _ =&gt; HNil
  
    implicit def hParseCons[InH,OutH,TIn &lt;:HList,TOut&lt;:HList](implicit parse:InH=&gt;OutH,parseTail:TIn=&gt;TOut): (InH :+: TIn) =&gt; (OutH :+: TOut) =
      in =&gt; HCons(parse(in.head),parseTail(in.tail))
  
    def hparse[In &lt;: HList, Out &lt;: HList](in:In)(implicit parse: In =&gt; Out):Out = in
  
  }
  
  
  object PG {
  
    import HList._
  
  
    def main(args: Array[String]) {
  
      import HApplyOps._
  
      val l = hparse[HNil,HNil](HNil)
  
    }
  }
  </code></pre>