나는 볼품의 부산물을 이해하고 다음과 같은 예를하려고, 즉 작동하지 않습니다파라미터 ENC에 대한 암시 적 가치를 찾을 수 없습니다 : CsvEncoder [모양]
이import shapeless.{HList, ::, HNil}
import shapeless.Generic
import shapeless.{Coproduct, :+:, CNil, Inl, Inr}
trait CsvEncoder[A] {
def encode(value: A): List[String]
}
sealed trait Shape
final case class Rectangle(width: Double, height: Double) extends Shape
final case class Circle(radius: Double) extends Shape
object CsvEncoder {
def createEncoder[A](func: A => List[String]): CsvEncoder[A] = {
new CsvEncoder[A] {
override def encode(value: A): List[String] = func(value)
}
}
implicit val booleanEncoder: CsvEncoder[Boolean] =
createEncoder(value => if (value) List("yes") else List("no"))
implicit val intEncoder: CsvEncoder[Int] =
createEncoder(value => List(value.toString))
implicit val stringEncoder: CsvEncoder[String] =
createEncoder(value => List(value))
implicit val doubleEncoder: CsvEncoder[Double] =
createEncoder(value => List(value.toString))
def apply[A](implicit enc: CsvEncoder[A]): CsvEncoder[A] = enc
implicit val cnilEncoder: CsvEncoder[CNil] =
createEncoder(cnil => throw new Exception("Inconceivable!"))
implicit def coproductEncoder[H, T <: Coproduct](
implicit
hEncoder: CsvEncoder[H],
tEncoder: CsvEncoder[T]
): CsvEncoder[H :+: T] = createEncoder {
case Inl(h) => hEncoder.encode(h)
case Inr(t) => tEncoder.encode(t)
}
def writeCsv[A](values: List[A])(implicit enc: CsvEncoder[A]): String =
values.map(value => enc.encode(value).mkString(",")).mkString("\n")
}
object Main {
def main(args: Array[String]) {
println("----------------------------------------------------------")
val shapes: List[Shape] = List(
Rectangle(3.0, 4.0),
Circle(1.0)
)
println(CsvEncoder.writeCsv(shapes))
}
}
컴파일러는 불평 :
Error:(162, 32) could not find implicit value for parameter enc: CsvEncoder[Shape]
println(CsvEncoder.writeCsv(shapes))
Error:(162, 32) not enough arguments for method writeCsv: (implicit enc: CsvEncoder[Shape])String.
Unspecified value parameter enc.
println(CsvEncoder.writeCsv(shapes))
Shape
에 CsvEncoder
의 인스턴스를 만들었습니까? 무형의 것이 나를 돌봐야합니까?