I'm trying to use a type-dependent type class in a method as below:
@typeclass trait Identifiable[M] {
type K
def identify(id: M): K
}
object Identifiable {
type Aux[M, K0] = Identifiable[M] { type K = K0 }
implicit def identifiableTuple[K1, K2](
implicit
a: Identifiable[K1],
b: Identifiable[K2]
): Identifiable.Aux[(K1, K2), (a.K, b.K)] = new Identifiable[(K1, K2)] {
type K = (a.K, b.K)
override def identify(id: (K1, K2)): K = {
val k1 = a.identify(id._1)
val k2 = b.identify(id._2)
(k1, k2)
}
}
However, when I try to use it like bellow the implicit parameters is not resolved
def a[K: Identifiable](key:K) = {
case k =>
val keyString: String = the[Identifiable.Aux[K, String]].identify(key)
case (k1,k2) =>
val keyString: (String,String) = the[Identifiable.Aux[K, (String, String)]].identify(key) }