Если мы хотим проверить, одинаковы ли два прохождения значений в типе A, мы должны иметь порядок в типе данных A или функцию, чтобы проверить, являются ли два значения типа A одинаковыми.
Решение: сначала, имея какой-то способ проверить, одинаковы ли два массива (записав порядок или функцию), а затем, написать функцию, чтобы проверить, совпадают ли два обхода массива [T].
Следующая функция проверяет, совпадают ли два массива:
def isTheSameArray[T](xs: Array[T], ys: Array[T])(implicit ordering: Ordering[T]): Boolean =
xs.size == ys.size && xs.zip(ys).forall{ case (x, y) => x == y }
Теперь мы можем написать функцию для проверки того, совпадают ли два буфера массива, как показано ниже:
def isTheSame[T](xs: Traversable[Array[T]], ys: Traversable[Array[T]])(implicit ordering: Ordering[T]): Boolean =
if (xs.size != ys.size) false
else if (xs.isEmpty == ys.isEmpty) true
else isTheSameArray(xs.head, ys.head) && isTheSame(xs.tail, ys.tail)