有没有办法创建一个隐式类来提供一个自定义函数来返回一个与记录风格的singleton操作符->>
相同类型的FieldType?包装在函数中创建Shapeless FieldType
我想这样做:
import shapeless.syntax.singleton._
implicit class FieldMaker[S <: Symbol](val s: S) {
def make[T](t: T) = s ->> t
}
,使下面的两个值具有相同的类型:
val first = 'test ->> Foo("bar")
val second = 'test make Foo("bar")
在以前的尝试中,我不断收到由宏挫败mkSingletonOps
。任何意见将是有益的!
更新:
这样做的动机从创建一个DSL,并试图小心地控制它的语法造成的。上面的简化示例跳过了这个隐式类在DSL中特定的目的,即将一个函数应用于返回DSL中其他位置所需的类型类。
甲多个示例性的情况将是:
import shapeless.syntax.singleton._
def func(t: T): SomeTypeclass[T] = _ // elided
implicit class FieldMaker[S <: Symbol](val s: S) {
def make[T](t: T) = s ->> func(t)
}
使得以下两个值具有相同的类型:
val first = 'test ->> func(Foo("bar"))
val second = 'test make Foo("bar")
分配给second
表达是用于DSL所需的语法。
为什么不使用(或重命名)' - >>'? –
我正在创建一个比上面的例子更多的DSL,并且正在尝试将(make)的语法制作成特定的内容,所以DSL看起来就像我打算的那样。使用' - >>'可以工作,但会暴露该操作员和其他工作(上面未显示)。重命名' - >>'会帮助语法,但仍然需要公开其他工作(归结为f(Foo(“bar”))) – Ryan
@MilesSabin这是否意味着在当前版本的无形? – Ryan