Guest User

Untitled

a guest
Jan 30th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 KB | None | 0 0
  1. package net
  2.  
  3. import shapeless.{::, HList, HNil}
  4.  
  5. trait SizeOf[A] {
  6. def value: Int
  7. }
  8. object SizeOf {
  9.  
  10. def apply[A](implicit ev: SizeOf[A]): SizeOf[A] = ev
  11.  
  12. implicit def hlistSizeOf[H, L <: HList](implicit ev: SizeOf[L]) =
  13. new SizeOf[H :: L] {
  14. def value: Int = 1 + ev.value
  15. }
  16.  
  17. implicit val hnilSizeOf = new SizeOf[HNil] {
  18. def value: Int = 0
  19. }
  20.  
  21. }
  22.  
  23. import net.SizeOf
  24. import shapeless.{$colon$colon, HList, HNil}
  25.  
  26. scala> SizeOf[String :: HNil]
  27. res0: net.SizeOf[shapeless.::[String,shapeless.HNil]] = net.SizeOf$$anon$1@439fd7ab
  28.  
  29. scala> res0.value
  30. res1: Int = 1
  31.  
  32. scala> SizeOf[String :: Int :: Int :: HNil]
  33. res2: net.SizeOf[shapeless.::[String,shapeless.::[Int,shapeless.::[Int,shapeless.HNil]]]] = net.SizeOf$$anon$1@7f9d9cf8
  34.  
  35. scala> res2.value
  36. res4: Int = 3
Advertisement
Add Comment
Please, Sign In to add comment