Slide 23
Slide 23 text
似たデータの構造を受け取り、変換する関数の実装
例えば、同じデータ構造のclassからCSV形式の⽂字列に変換する関数を以下のように実装で
きる。
case class HogeEntity(foo: Int, bar: String, baz: Boolean)
case class HogeDTO(foo: Int, bar: String, baz: Boolean)
def getRepr[A](value: A)(implicit gen: Generic[A]) = gen.to(value)
def toCsv(row: Int :: String :: Boolean :: HNil): List[String] =
List(row(0).toString, row(1), row(2).toString)
val genEntity = getRepr(HogeEntity(1, "fuga", true))
toCsv(genEntity)
//res: List[String] = List("1", "fuga", "true")
val genDto = getRepr(HogeDTO(2, "piyo", false))
toCsv(genDto)
//res: List[String] = List("2", "piyo", "false")
shapelessと代数的データ型