ZM
hasMatchingSymbol reported error: No singleton value available for xtractor.Repr.
Size: a a a
ZM
hasMatchingSymbol reported error: No singleton value available for xtractor.Repr.
w
hasMatchingSymbol reported error: No singleton value available for xtractor.Repr.
ZM
trait Xtractor[X]{
type Repr
def xtractTypeClass[TC[_]](implicit tc: TC[Repr]): TC[X]
}
object Xtractor {
type Aux[A, B] = Xtractor[A] {type Repr = B}
implicit def estaticoXtractor[A, B](implicit c: Coercible[A, B]): Xtractor.Aux[B, A] = new Xtractor[B] {
override type Repr = A
override def xtractTypeClass[TC[_]](implicit tc: TC[A]): TC[B] = ???
}
}
case class Name(s: String)
object Name {
implicit def encoder(implicit xtractor: Xtractor[Name]): Encoder[Name] = xtractor.xtractTypeClass[Encoder]
}
IA
trait Xtractor[X]{
type Repr
def xtractTypeClass[TC[_]](implicit tc: TC[Repr]): TC[X]
}
object Xtractor {
type Aux[A, B] = Xtractor[A] {type Repr = B}
implicit def estaticoXtractor[A, B](implicit c: Coercible[A, B]): Xtractor.Aux[B, A] = new Xtractor[B] {
override type Repr = A
override def xtractTypeClass[TC[_]](implicit tc: TC[A]): TC[B] = ???
}
}
case class Name(s: String)
object Name {
implicit def encoder(implicit xtractor: Xtractor[Name]): Encoder[Name] = xtractor.xtractTypeClass[Encoder]
}
GP
Xtractor.Aux[A, String]
GP
encoder(implicit xtractor: Xtractor.Aux[Name, String])
ZM
encoder(implicit xtractor: Xtractor.Aux[Name, String])
ZM
GP
GP
GP
ZM
ZM
implicit def coe[A, B]: Coercible[A, B] = new Coercible[A, B] {}
GP
implicit def coe[A, B]: Coercible[A, B] = new Coercible[A, B] {}
ΛВ