def cartesianProduct(left: VAny, right: VAny)(using ctx: Context): VList =
val leftList = makeIterable(left)
val rightList = makeIterable(right)
val result = LazyList.unfold(
BigInt(0),
Option[BigInt](null),
Option[BigInt](null),
BigInt(0),
BigInt(0)
)(state =>
var (
diagNum,
lhsMax,
rhsMax,
lhsStart,
lhsEnd
) = state
lhsStart =
if rhsMax.isDefined then BigInt(0).max(diagNum - rhsMax.get)