我正在尝试学习 Shapeless(使用 2.10.2 版)。我创建了一个非常简单的可扩展记录:
val rec1 = ("foo" ->> 42) :: HNil
根据 REPL,这有类型
shapeless.::[Int with shapeless.record.KeyTag[String("foo"),Int],shapeless.HNil]
我正在尝试定义一个简单的函数:
def fun(x: ::[Int with KeyTag[String("foo"), Int], HNil]) = x("foo")
但它甚至不编译。我不能在类型声明中使用 String("foo") 并得到一个错误。
我有两个问题:
- 如何在我的代码中指定可扩展记录的类型?
- 当处理具有更多字段的记录时,类型声明的长度和复杂性将难以管理。给定记录的特定实例或其他解决方法,有没有办法为该类型创建别名?
编辑
我发现:
val rec1 = ("foo" ->> 42) :: HNil
val rec2 = ("foo" ->> 43) :: HNil
var x = rec1
x = rec2
效果很好。我得出结论rec1、rec2 和x 属于同一类型。我只是不知道如何在代码中表达这种类型!