有沒有辦法創建一個隱式類來提供一個自定義函數來返回一個與記錄風格的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