簡體   English   中英

用於減去HList類型的類型構造函數?

[英]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 (通常是在同伴對象中定義,而不是類型類本身)的類型類也沒有任何意義,這實際上是沒有意義的。 我建議看一下AuxRemoveAll類型類中扮演的角色,作為這種模式的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM