λ
Size: a a a
λ
Oℕ
AS
Oℕ
AS
implicit val userLoggable = new DictLoggable[User] {
override def fields[I, V, R, S](a: User, i: I)(implicit r: LogRenderer[I, V, R, S]): R = {
r.addString("name", a.name, i) |+| r.addString("surname", a.surname, i)
}
override def logShow(a: User): String = s"name = ${a.name}, surname = ${a.surname}"
}
λ
Oℕ
implicit val userLoggable = new DictLoggable[User] {
override def fields[I, V, R, S](a: User, i: I)(implicit r: LogRenderer[I, V, R, S]): R = {
r.addString("name", a.name, i) |+| r.addString("surname", a.surname, i)
}
override def logShow(a: User): String = s"name = ${a.name}, surname = ${a.surname}"
}
Loggable.show[User] + Loggable[String].contramap(_.name).named("user") + Loggable[String].contramap(_.surname).named("surname")
𝛈µ
Loggable.show[User] + Loggable[String].contramap(_.name).named("user") + Loggable[String].contramap(_.surname).named("surname")
Oℕ
Oℕ
Oℕ
Oℕ
𝛈µ
𝛈µ
𝛈µ
AS
Oℕ
Oℕ