scala - Is it possible to write typeclass with different implementations? -
this follow-up previous question
suppose have trait converterto
, two implementations:
trait converterto[t] { def convert(s: string): option[t] } object converters1 { implicit val toint: converterto[int] = ??? } object converters2 { implicit val toint: converterto[int] = ??? }
i have 2 classes a1
, a2
class a1 { def foo[t](s: string)(implicit ct: converterto[t]) = ct.convert(s) } class a2 { def bar[t](s: string)(implicit ct: converterto[t]) = ct.convert(s) }
now foo[t]
call use converters1
, bar[t]
call use converters2
without importing converters1
, converters2
in client code.
val a1 = new a1() val a2 = new a2() ... val = a1.foo[int]("0") // use converters1 without importing ... val j = a2.bar[int]("0") // use converters2 without importing
can done in scala ?
import converters
in class.
class a1 { import converters1._ private def fooprivate[t](s: string)(implicit ct: converterto[t]) = ct.convert(s) def fooshowntoclient[t](s: string) = fooprivate(s) }
then use method, shown client
val a1 = new a1() a1.fooshowntoclient[int]("0")
now client unaware of convertors.
Comments
Post a Comment