选项检查HList,Scala

时间:2014-03-23 17:41:32

标签: scala types shapeless hlist

因此,有hlists个选项:

val l1 = Option(1) :: Option("str") :: Option(true) :: HNil
val l2 = Option(1) :: {None: Option[String]} :: Option(false) :: HNil

要创建一个新列表,包含所有匹配类型对象(其TypeTags),可以使用liftA2函数(https://stackoverflow.com/a/14456938/1092399)(注意:有重复类型和大量{ {1}}结果中的对象,但这不是问题):

HNil

所以现在的目标是跳过所有空的object eq extends Poly2 { implicit def neq[A, B](implicit e: A =:!= B) = at[Option[A], Option[B]] { case (a, b) => (HNil) } implicit def eq[A, B](implicit t: TypeTag[A], e: A =:= B) = at[Option[A], Option[B]] {(a, b) => t :: HNil} } liftA2(eq)(l1, l2) //> there would be all three types 对象(如果我们可以这样做,那么就有可能构建一个匹配所有空Option个对象的列表);我们需要像:

Option

上面的函数是错误的,导致发生类型擦除(结果中的类型〜object eqo extends Poly2 { implicit def neq[A, B](implicit e: A =:!= B) = at[Option[A], Option[B]] { case (a, b) => (HNil) } implicit def eq[A, B](implicit t: TypeTag[A], e: A =:= B) = at[Option[A], Option[B]] { case(a, None) => HNil case (None, b) => HNil case (a, b) => t :: HNil } } liftA2(eqo)(l1, l2) //> result with no String type (should be) )。 所以问题是:有没有办法进行这样的检查,或者这是完全不真实的?

P.S。在这种情况下,这是一种非常有趣的Product with Serializable with shapeless.HList类型:case

0 个答案:

没有答案