Scala type bounds =:= -


while compiles:

  implicit class container[t](val value:t) extends anyval{     def addint(x:int)(implicit ev:t=:=int) = value+x   } 

this complains type mismatch, expected t, actual int, if ignores type bound.

  implicit class container[t](val value:t=>int) extends anyval{     def addint(x:int)(implicit ev:t=:=int) = value(x)   } 

why?

your type constraint backwards, actually. t =:= int provides implicit evidence t int, not exactly int t. if @ declaration if =:=, you'll see goes 1 way:

sealed abstract class =:=[from, to] extends (from => to) serializable 

your first example works because value t, , constraint t =:= int, implicitly converts t int. second example, need feed t value: t => int, need other direction.

this works:

implicit class container[t](val value: t => int) extends anyval {     def addint(x: int)(implicit ev: int =:= t) = value(x) } 

the reason why second example using int <:< t works because <:< provides implicit conversion int => t.


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -