この質問に答えて、私はマクロパラダイスブランチを使用してScalaでHaskellスタイルの「where」式を実装しようとしています。コードはscala-whereで入手できます。これで、次のように書くことができます。
val result = where ( f1(1) * f2(2), {
def f1(x : Int) = x + 1
def f2(x : Int) = x + 2
})
しかし、私が本当にやりたいのは、これを中置位置で呼び出すことができるようにすることです。
val result = ( f1(1) * f2(2)) where {
def f1(x : Int) = x + 1
def f2(x : Int) = x + 2
}
通常、この種のことは簡単ですが、マクロ呼び出しでそれを行う方法がわかりません。式(f1(1)* f2(2))は、マクロアプリケーションの前に入力されないため、暗黙の値クラスを作成するようなものは機能しません。そうでなければ、この種の構文を取得する方法はありますか?
これに失敗した場合は、2つのパラメータリストを作成するだけで、次のことが可能になります。
val result = where (f1(1) * f2(2)) {
def f1(x : Int) = x + 1
def f2(x : Int) = x + 2
}
いいのですが、これも難しいようです。2つのパラメータリストを持つマクロを呼び出すことはできますか?