Non proprio possibile, come dici tu, ma è possibile farlo utilizzando il modello tipo di classe. Ad esempio, dal here:
sealed abstract class Acceptable[T]
object Acceptable {
implicit object IntOk extends Acceptable[Int]
implicit object LongOk extends Acceptable[Long]
}
def f[T: Acceptable](t: T) = t
scala> f(1)
res0: Int = 1
scala> f(1L)
res1: Long = 1
scala> f(1.0)
<console>:8: error: could not find implicit value for parameter ev: Acceptable[Double]
f(1.0)
^
EDIT
Questo funziona se la classe e l'oggetto sono compagni. Su REPL, se si digita ciascuno su una linea diversa (cioè, un "risultato" appare tra di loro), non sono compagni. È possibile digitare è come qui di seguito, però:
scala> sealed abstract class Acceptable[T]; object Acceptable {
| implicit object IntOk extends Acceptable[Int]
| implicit object LongOk extends Acceptable[Long]
| }
defined class Acceptable
defined module Acceptable
fonte
2010-09-24 21:34:06
Grazie, inoltre riferimento http://ropas.snu.ac.kr/~bruno/papers/TypeClasses.pdf – oluies
@Brent Come ho detto per e-mail, questo è probabilmente il risultato di digitare la classe un oggetto su linee diverse. Vedi la mia modifica. –