私はいくつかのパターンに対しても一致させたい用語に同値関係を実装しようとしています。ただし、私の関係は対称であるため、パターン マッチングもこれを反映する必要があります。
次の例を見てください。
abstract class Term
case class Constructor(txt:String) extends Term
case class Variable(txt:String) extends Term
case class Equality(t1:Term, t2:Term)
def foobar(e:Equality) = e match {
case Equality(Variable(x),Constructor(y)) => "do something rather complicated with x and y"
case Equality(Constructor(y),Variable(x)) => "do it all over again"
}
実際、私はこのようなことをしたいと思います
def foobar(e:Equality) = e match {
case Equality(Variable(x),Constructor(y)) | Equality(Constructor(y),Variable(x))
=> "yeah! this time we need to write the code only one time ;-)"
}
ただし、たとえばhereで説明されているように、これは許可されていません。誰かがこの種の問題に対する良い解決策を持っていますか? ヘルプ/ポインタは大歓迎です。