我目前有一些看起来像这样的东西:
data foreach {
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(a))))))))))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a))))))))))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a)))))))))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a))))))))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a)))))))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a))))))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a)))))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a))))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a)))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a))))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Left(Right(a)))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Left(Right(a))))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Left(Right(a)))))))) => /* Do something */
case Left(Left(Left(Left(Left(Left(Right(a))))))) => /* Do something */
case Left(Left(Left(Left(Left(Right(a)))))) => /* Do something */
case Left(Left(Left(Left(Right(a))))) => /* Do something */
case Left(Left(Left(Right(a)))) => /* Do something */
case Left(Left(Right(a))) => /* Do something */
case Left(Right(a)) => /* Do something */
case Right(a) => /* Do something */
}
我想知道是否有任何方法可以实现某种递归函数来使我的模式匹配更清晰。看起来更像这样的东西:
data foreach {
case Foo(a, 3) => /* Do something */
case Foo(a, 2) => /* Do something */
case Foo(a, 1) => /* Do something */
case Foo(a, 0) => /* Do something */
}