I currently have something that looks like this:
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 */
}
I was wondering if there is any way to implement some sort of recursive function to make my pattern matching cleaner. Something that would look more like this:
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 */
}