由于它们都是HList类型,我必须创建具有不同名称的函数。以下是kittens
中的示例 //sequence a product HList
trait Sequencer[L <: HList] {
type Out
def apply(in: L): Out
}
//sequence an extensible record HList
trait RecordSequencer[L <: HList] {
type Out
def apply(in: L): Out
}
implicit class sequenceOps[L <: HList](self: L) {
def sequence(implicit seq: Sequencer[L]): seq.Out = seq(self)
def sequenceRecord(implicit seq: RecordSequencer[L]): seq.Out = seq(self) //version for extensible records
}
请注意,我必须使用名称sequenceRecord与产品HList的序列方法不同。我发现这很随意而且很麻烦。 有没有办法让可扩展记录和产品HList具有相同名称的序列方法?或者您是否总是必须为这两种HList提供两个不同的名称?
答案 0 :(得分:1)
您可以使用shapeless.ops.record.Keys
的{{1}}实例来区分记录和非记录L
。然后剩下的工作是处理隐含的优先级,以确保两个扩展方法不冲突。像下面这样的东西可以完成这项工作,
HLists