Advertisement
Guest User

Untitled

a guest
Aug 29th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.65 KB | None | 0 0
  1. object Yuval extends App {
  2. class Animal {
  3. this: Reflect =>
  4. }
  5.  
  6. implicit def reflectOrdering: Ordering[Animal with Reflect] = Ordering.by(e => e.canReflect)
  7.  
  8. object Animal {
  9. def isGreaterAnimal(first: Animal with Reflect, second: Animal with Reflect)(implicit ev: Ordering[Animal with Reflect]) = ev.gt(first, second)
  10. }
  11.  
  12. trait Reflect{
  13. val canReflect: Boolean
  14. }
  15.  
  16. trait Reflective extends Reflect{
  17. val canReflect = true
  18. }
  19.  
  20. trait Automaton extends Reflect{
  21. val canReflect = false
  22. }
  23.  
  24.  
  25.  
  26. val reflective = new Animal with Reflective
  27. val robot = new Animal with Automaton
  28.  
  29. println(Animal.isGreaterAnimal(reflective, robot))
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement