1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
object `package` {
trait Score { def toString : String }
trait Test[+T <: Score] { def apply(s : String) : T }
case class FT(f : Float) extends Score
implicit object FT extends Test[FT] { def apply(s : String) : FT = new FT(s.toFloat) }
case class IT(i : Int) extends Score
implicit object IT extends Test[IT] { def apply(s : String) : IT = new IT(s.toInt) }
}
class TT[+T <: Score](implicit val tb : Test[T]) {
def read(s : String) : T = tb(s)
}
object Tester {
val tt = new TT[FT]
val r = tt.read("1.0")
r.toString
}
|