[英]Type constructor for subtracting HList types?
我正在寻找一种可以将一种HList类型与另一种类型相减的类型构造器。
trait Subtract {
type Aux[Full <: HList, ToSubract <: HList] = ???
}
object SubtractExample {
type AList = ClassA :: ClassB :: HNil
type BList = ClassB :: HNil
Subtract.Aux[AList, BList] == ClassA :: HNil
}
如果这样的构造函数不存在,有人可以指出我的实现方向吗? 谢谢!
如果AList
将始终包含的元素BList
为了(但不是一定是连续的),你可以使用RemoveAll
:
import shapeless._, ops.hlist.RemoveAll
trait ClassA; trait ClassB
type AList = ClassA :: ClassB :: HNil
type BList = ClassB :: HNil
val remover = RemoveAll[AList, BList]
remover(new ClassA {} :: new ClassB {} :: HNil)
这将返回删除的元素和剩余的元组(这是您想要的)。
这适用于您的示例案例,即使您的要求略有不同, RemoveAll
实现也是一个不错的起点。
作为一个脚注,尽管RemoveAll
是类型构造函数,但在这种情况下,它更相关的是类型类。 拥有一个没有类型参数而只有一个Aux
(通常是在同伴对象中定义,而不是类型类本身)的类型类也没有任何意义,这实际上是没有意义的。 我建议看一下Aux
在RemoveAll
类型类中扮演的角色,作为这种模式的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.