Scala 如果类型是HList的成员,如何签入shapeless?

Scala 如果类型是HList的成员,如何签入shapeless?,scala,shapeless,type-level-computation,Scala,Shapeless,Type Level Computation,我正在对字符串执行一系列预处理步骤,我正在考虑使用HLists来提高步骤的安全性。某些处理步骤必须在其他步骤之后运行,因此我考虑在类型系统中对其进行编码。我的第一次尝试是: trait Step trait Raw extends Step trait A extends Step trait B extends Step trait DependsOnA extends Step trait DependsOnB extends Step case class ToBeProcessed[S

我正在对字符串执行一系列预处理步骤,我正在考虑使用
HList
s来提高步骤的安全性。某些处理步骤必须在其他步骤之后运行,因此我考虑在类型系统中对其进行编码。我的第一次尝试是:

trait Step
trait Raw extends Step
trait A extends Step
trait B extends Step
trait DependsOnA extends Step
trait DependsOnB extends Step

case class ToBeProcessed[S <: Step](value: String)

object ToBeProcessed {
    def raw(input: String): ToBeProcessed[Raw] = ...
    def doA(input: ToBeProcessed[Raw]): ToBeProcessed[A] = ...
    def doB(input: ToBeProcessed[A]): ToBeProcessed[B] = ...
    def doDependsOnA(input: ToBeProcessed[B]): ToBeProcessed[DependsOnA] = ...
    def doDependsOnB(input: ToBeProcessed[DependsOnA]): ToBeProcessed[DependsOnB] = ...
}
为了对依赖项进行编码,我必须有一种方法来检查a是否包含在给定的HList中:

    def doDependsOnA[S <: HList, ???](input: ToBeProcessed[S]): ToBeProcessed[DependsOnA :: S] = ...

}

def doDependsOnA[SShapeless已经有了一个typeclass来证明
HList
包含某个类型:
选择器
。您可以这样使用它:

import shapeless._, ops.hlist.Selector

def doDependsOnA[S <: HList](input: ToBeProcessed[S])(implicit ev: Selector[S,A]): ToBeProcessed[DependsOnA :: S] = ???
import shapeless.\uu,ops.hlist.Selector

def doDependsOnA[S beauty!非常感谢。今天早些时候,我正在研究shapeless的代码,寻找它,但没有偶然发现这一点。
import shapeless._, ops.hlist.Selector

def doDependsOnA[S <: HList](input: ToBeProcessed[S])(implicit ev: Selector[S,A]): ToBeProcessed[DependsOnA :: S] = ???