[英]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.