DSL の場合、関数値を暗黙的に拡張する必要があります。例えば:
trait PimpedFunction[-A, +B] extends Function1[A, B] {
def foo = 42
}
object PimpedFunction {
implicit def pimp[A, B](f: Function1[A, B]): PimpedFunction[A, B] =
new PimpedFunction[A, B] {
def apply(a: A) = f(a)
}
}
を使用する関数はPimpedFunction
、次のように定義できます。
def takes(f: PimpedFunction[String, Int]) = f.foo
問題は、 を呼び出すコードにありますtakes
。以下は期待どおりに機能します。
takes((_: String).size)
しかし、パラメーターの型を省略した場合、コンパイルはそれを推測できません。
takes(_.size)
scalac の推論を助けるために何かを変更できますか?
OBS: 実際のユースケースはこれに関連しています: https://gist.github.com/xeno-by/4542402