Я использую несколько внешних типов данных в программе Scala.Моя цель - определить полиморфные функции для этих типов данных, используя классы типов.Проблема в том, что в самой программе Scala эти типы данных должны быть последовательно повторены в определенных точках, которые являются теми же точками, где мне нужно использовать полиморфные функции из класса типов.Так, например, если бы у нас было
trait Show[A] {
def show(a: A, b : String): String
}
object Show {
def apply[A](implicit sh: Show[A]): Show[A] = sh
def show[A: Show](a: A, b : String) = Show[A].show(a, b)
implicit class ShowOps[A: Show](a: A) {
def show(b : String) = Show[A].show(a, b)}
implicit val blogCanShow: Show[Int] = new Show[Blog] {
def show(blog: Blog, b : String): String = s"blog $blog" + b
}
implicit val twitterCanShow: Show[String] = new Show[Twitter] {
def show(twitter: Twitter, b : String): String = s"twitter $twitter" + b }
}
Тогда мне нужно было бы использовать типы данных следующим образом:
for each data type:
call show()
business logic
call another polymorphic function like show()
more business logic
etc...
Я пытался использовать HLists из Shapeless, но не мог понять, какполучить повторяемый блок кода для работы с ним.Я думаю, что мне нужно использовать какое-то отражение здесь, но не знаю точно, с чего начать.Любые предложения или помощь будут очень признательны.