Advertisement
Guest User

Untitled

a guest
May 24th, 2015
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. object Polymorphism {
  2. object MixIn {
  3. trait Animal {
  4. def call: String
  5. }
  6.  
  7. // mix-in trait.
  8. class Dog extends Animal {
  9. override def call: String = "ワン"
  10. }
  11. class Cat extends Animal {
  12. override def call: String = "ニャー"
  13. }
  14. }
  15.  
  16. object TypeClass {
  17. trait Animal[A] {
  18. def call: String
  19. }
  20.  
  21. // no mix-in.
  22. class Dog
  23. class Cat
  24.  
  25. implicit object CallingDog extends Animal[Dog] {
  26. override def call: String = "ワン"
  27. }
  28. implicit object CallingCat extends Animal[Cat] {
  29. override def call: String = "ニャー"
  30. }
  31.  
  32. def call[A: Animal](a: A) = implicitly[Animal[A]].call
  33. }
  34. }
  35.  
  36. object Main extends App {
  37. Seq(
  38. (new MixIn.Dog).call,
  39. (new MixIn.Cat).call,
  40. TypeClass.call(new TypeClass.Dog),
  41. TypeClass.call(new TypeClass.Cat)
  42. ) foreach {
  43. println
  44. }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement