Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net
- import shapeless.{::, HList, HNil}
- trait SizeOf[A] {
- def value: Int
- }
- object SizeOf {
- def apply[A](implicit ev: SizeOf[A]): SizeOf[A] = ev
- implicit def hlistSizeOf[H, L <: HList](implicit ev: SizeOf[L]) =
- new SizeOf[H :: L] {
- def value: Int = 1 + ev.value
- }
- implicit val hnilSizeOf = new SizeOf[HNil] {
- def value: Int = 0
- }
- }
- import net.SizeOf
- import shapeless.{$colon$colon, HList, HNil}
- scala> SizeOf[String :: HNil]
- res0: net.SizeOf[shapeless.::[String,shapeless.HNil]] = net.SizeOf$$anon$1@439fd7ab
- scala> res0.value
- res1: Int = 1
- scala> SizeOf[String :: Int :: Int :: HNil]
- res2: net.SizeOf[shapeless.::[String,shapeless.::[Int,shapeless.::[Int,shapeless.HNil]]]] = net.SizeOf$$anon$1@7f9d9cf8
- scala> res2.value
- res4: Int = 3
Advertisement
Add Comment
Please, Sign In to add comment