fork download
  1. object Main extends App {
  2. case class Address(street: String, city: String, zipcode: String)
  3. case class Person(name: String, address: Address)
  4. case class Account(owner: Person, entries: List[Int])
  5.  
  6. def balance(a: Account) = a.entries.sum
  7.  
  8. trait Sum[A] {
  9. def sum(a: A): Int
  10. }
  11.  
  12. def sum[A](a: A)(implicit summer: Sum[A]) = summer.sum(a)
  13.  
  14. implicit object AccountSum extends Sum[Account] {
  15. def sum(a: Account): Int = balance(a)
  16. }
  17.  
  18. val account = Account(Person("name", Address("streetname", "cityname", "10000")), List(2, 8, 32))
  19.  
  20. println(sum(account))
  21. }
Success #stdin #stdout 0.4s 382016KB
stdin
Standard input is empty
stdout
42