horan.kse3-basics_3.0.3.3.source-code.Tuples.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kse3-basics_3 Show documentation
Show all versions of kse3-basics_3 Show documentation
Kerr Scala Extensions 3, module kse3-basics
// This file is distributed under the BSD 3-clause license. See file LICENSE.
// Copyright (c) 2011-15, 2021-23 Rex Kerr, HHMI Janelia, UCSF, and Calico Life Sciences LLC.
package kse.basics
extension [A](a: A) {
/** Make a tuple with this value and another. Equivalent to `a -> z`. */
inline def tup[Z](inline z: Z): (A, Z) = (a, z)
/** Make a tuple with this value and another, by putting the other value in slot 1. Equivalent to `z -> a`. */
inline def tup_1[Z](inline z: Z): (Z, A) = (z, a)
/** Make a tuple by applying a function to this value, and keeping both this value and the result. */
inline def tupWith[Z](inline f: A => Z): (A, Z) = (a, f(a))
}
extension [A, B](q: (A, B)) {
/** Create a new tuple with the first value replaced. */
inline def _1to[Z](inline z: Z): (Z, B) = (z, q._2)
/** Create a new tuple with the first value computed from the old one using a function. */
inline def _1op[Z](inline zfn: A => Z): (Z, B) = (zfn(q._1), q._2)
/** Create a new tuple with the second value replaced. */
inline def _2to[Z](inline z: Z): (A, Z) = (q._1, z)
/** Create a new tuple with the second value computed from the old one using a function. */
inline def _2op[Z](inline zfn: B => Z): (A, Z) = (q._1, zfn(q._2))
/** Create a new tuple by applying a different function to each position of this tuple. */
inline def ops[Z, Y](inline az: A => Z, inline by: B => Y): (Z, Y) = (az(q._1), by(q._2))
/** Create a new tuple by applying the same function to each position of this tuple. */
inline def sameOp[Z](zfn: (A | B) => Z): (Z, Z) = (zfn(q._1), zfn(q._2))
/** Pass the values of this tuple into a two-argument function and return the result */
inline def merge[Z](inline zfn: (A, B) => Z): Z = zfn(q._1, q._2)
/** Using a binary operation, reduce this tuple to a single value */
inline def reduce[Z >: A | B](zop: (Z, Z) => Z) = zop(q._1, q._2)
/** Create a new tuple that is this one with a new component on the end */
inline def tup[Z](inline z: Z): (A, B, Z) = (q._1, q._2, z)
/** Create a new tuple that is this one with a new component in position 1 and the rest afterwards */
inline def tup_1[Z](inline z: Z): (Z, A, B) = (z, q._1, q._2)
/** Create a new tuple that is this one with the new component in position 2 and the rest arranged around it in order */
inline def tup_2[Z](inline z: Z): (A, Z, B) = (q._1, z, q._2)
/** Create a new tuple that is this one plus a value computed with a function of the elements of this tuple. */
inline def tupWith[Z](inline zfn: (A, B) => Z): (A, B, Z) = (q._1, q._2, zfn(q._1, q._2))
/** Cut out the first value of this tuple, leaving only the second. */
inline def snip_1: B = q._2
/** Cut out the last value of this tuple, leaving only the first. */
inline def snip: A = q._1
/** Concatenate this tuple with a 2-tuple */
inline def join[Y, Z](p: (Y, Z)): (A, B, Y, Z) = (q._1, q._2, p._1, p._2)
/** Concatenate this tuple with a 3-tuple */
inline def join[X, Y, Z](p: (X, Y, Z)): (A, B, X, Y, Z) = (q._1, q._2, p._1, p._2, p._3)
/** Concatenate this tuple with a 4-tuple */
inline def join[W, X, Y, Z](p: (W, X, Y, Z)): (A, B, W, X, Y, Z) = (q._1, q._2, p._1, p._2, p._3, p._4)
/** Concatenate this tuple with a 5-tuple. */
inline def join[V, W, X, Y, Z](p: (V, W, X, Y, Z)): (A, B, V, W, X, Y, Z) = (q._1, q._2, p._1, p._2, p._3, p._4, p._5)
/** Concatenate this tuple with a 6-tuple. */
inline def join[U, V, W, X, Y, Z](p: (U, V, W, X, Y, Z)): (A, B, U, V, W, X, Y, Z) = (q._1, q._2, p._1, p._2, p._3, p._4, p._5, p._6)
/** Concatenate this tuple with a 7-tuple. */
inline def join[T, U, V, W, X, Y, Z](p: (T, U, V, W, X, Y, Z)): (A, B, T, U, V, W, X, Y, Z) = (q._1, q._2, p._1, p._2, p._3, p._4, p._5, p._6, p._7)
}
extension [A, B, C](q: (A, B, C)) {
/** Create a new tuple with the first value replaced. */
inline def _1to[Z](inline z: Z): (Z, B, C) = (z, q._2, q._3)
/** Create a new tuple with the first value computed from the old one using a function. */
inline def _1op[Z](inline zfn: A => Z): (Z, B, C) = (zfn(q._1), q._2, q._3)
/** Create a new tuple with the second value replaced. */
inline def _2to[Z](inline z: Z): (A, Z, C) = (q._1, z, q._3)
/** Create a new tuple with the second value computed from the old one using a function. */
inline def _2op[Z](inline zfn: B => Z): (A, Z, C) = (q._1, zfn(q._2), q._3)
/** Create a new tuple with the third value replaced. */
inline def _3to[Z](inline z: Z): (A, B, Z) = (q._1, q._2, z)
/** Create a new tuple with the third value computed from the old one using a function. */
inline def _3op[Z](inline zfn: C => Z): (A, B, Z) = (q._1, q._2, zfn(q._3))
/** Create a new tuple by applying a different function to each position of this tuple. */
inline def ops[Z, Y, X](inline az: A => Z, inline by: B => Y, inline cx: C => X): (Z, Y, X) = (az(q._1), by(q._2), cx(q._3))
/** Create a new tuple by applying the same function to each position of this tuple. */
inline def sameOp[Z](zfn: (A | B | C) => Z): (Z, Z, Z) = (zfn(q._1), zfn(q._2), zfn(q._3))
/** Pass the values of this tuple into a three-argument function and return the result */
inline def merge[Z](inline zfn: (A, B, C) => Z): Z = zfn(q._1, q._2, q._3)
/** Using a binary operation, reduce this tuple to a single value */
inline def reduce[Z >: A | B | C](zop: (Z, Z) => Z) = zop(zop(q._1, q._2), q._3)
/** Create a new tuple that is this one with a new component on the end */
inline def tup[Z](inline z: Z): (A, B, C, Z) = (q._1, q._2, q._3, z)
/** Create a new tuple that is this one with a new component in position 1 and the rest afterwards */
inline def tup_1[Z](inline z: Z): (Z, A, B, C) = (z, q._1, q._2, q._3)
/** Create a new tuple that is this one with the new component in position 2 and the rest arranged around it in order */
inline def tup_2[Z](inline z: Z): (A, Z, B, C) = (q._1, z, q._2, q._3)
/** Create a new tuple that is this one with the new component in position 3 and the rest arranged around it in order */
inline def tup_3[Z](inline z: Z): (A, B, Z, C) = (q._1, q._2, z, q._3)
/** Create a new tuple that is this one plus a value computed with a function of the elements of this tuple. */
inline def tupWith[Z](inline zfn: (A, B, C) => Z): (A, B, C, Z) = (q._1, q._2, q._3, zfn(q._1, q._2, q._3))
/** Cut out the first value of this tuple, creating a new tuple from what"s left. */
inline def snip_1: (B, C) = (q._2, q._3)
/** Cut out the second value of this tuple, creating a new tuple from what"s left. */
inline def snip_2: (A, C) = (q._1, q._3)
/** Cut out the last value of this tuple, creating a new tuple from what"s left. */
inline def snip: (A, B) = (q._1, q._2)
/** Concatenate this tuple with a 2-tuple */
inline def join[Y, Z](p: (Y, Z)): (A, B, C, Y, Z) = (q._1, q._2, q._3, p._1, p._2)
/** Concatenate this tuple with a 3-tuple */
inline def join[X, Y, Z](p: (X, Y, Z)): (A, B, C, X, Y, Z) = (q._1, q._2, q._3, p._1, p._2, p._3)
/** Concatenate this tuple with a 4-tuple */
inline def join[W, X, Y, Z](p: (W, X, Y, Z)): (A, B, C, W, X, Y, Z) = (q._1, q._2, q._3, p._1, p._2, p._3, p._4)
/** Concatenate this tuple with a 5-tuple */
inline def join[V, W, X, Y, Z](p: (V, W, X, Y, Z)): (A, B, C, V, W, X, Y, Z) = (q._1, q._2, q._3, p._1, p._2, p._3, p._4, p._5)
/** Concatenate this tuple with a 6-tuple */
inline def join[U, V, W, X, Y, Z](p: (U, V, W, X, Y, Z)): (A, B, C, U, V, W, X, Y, Z) = (q._1, q._2, q._3, p._1, p._2, p._3, p._4, p._5, p._6)
/** Split this tuple after element 1, creating a singleton and a 2-tuple. */
inline def cutAt1: (A, (B, C)) = (q._1, (q._2, q._3))
/** Split this tuple after element 2, creating a 2-tuple and a singleton. */
inline def cutAt2: ((A, B), C) = ((q._1, q._2), q._3)
}
extension [A, B, C, D](q: (A, B, C, D)) {
/** Create a new tuple with the first value replaced. */
inline def _1to[Z](inline z: Z): (Z, B, C, D) = (z, q._2, q._3, q._4)
/** Create a new tuple with the first value computed from the old one using a function. */
inline def _1op[Z](inline zfn: A => Z): (Z, B, C, D) = (zfn(q._1), q._2, q._3, q._4)
/** Create a new tuple with the second value replaced. */
inline def _2to[Z](inline z: Z): (A, Z, C, D) = (q._1, z, q._3, q._4)
/** Create a new tuple with the second value computed from the old one using a function. */
inline def _2op[Z](inline zfn: B => Z): (A, Z, C, D) = (q._1, zfn(q._2), q._3, q._4)
/** Create a new tuple with the third value replaced. */
inline def _3to[Z](inline z: Z): (A, B, Z, D) = (q._1, q._2, z, q._4)
/** Create a new tuple with the third value computed from the old one using a function. */
inline def _3op[Z](inline zfn: C => Z): (A, B, Z, D) = (q._1, q._2, zfn(q._3), q._4)
/** Create a new tuple with the fourth value replaced. */
inline def _4to[Z](inline z: Z): (A, B, C, Z) = (q._1, q._2, q._3, z)
/** Create a new tuple with the fourth value computed from the old one using a function. */
inline def _4op[Z](inline zfn: D => Z): (A, B, C, Z) = (q._1, q._2, q._3, zfn(q._4))
/** Create a new tuple by applying a different function to each position of this tuple. */
inline def ops[Z, Y, X, W](inline az: A => Z, inline by: B => Y, inline cx: C => X, inline dw: D => W): (Z, Y, X, W) = (az(q._1), by(q._2), cx(q._3), dw(q._4))
/** Create a new tuple by applying the same function to each position of this tuple. */
inline def sameOp[Z](zfn: (A | B | C | D) => Z): (Z, Z, Z, Z) = (zfn(q._1), zfn(q._2), zfn(q._3), zfn(q._4))
/** Pass the values of this tuple into a four-argument function and return the result */
inline def merge[Z](inline zfn: (A, B, C, D) => Z): Z = zfn(q._1, q._2, q._3, q._4)
/** Using a binary operation, reduce this tuple to a single value */
inline def reduce[Z >: A | B | C | D](zop: (Z, Z) => Z) = zop(zop(zop(q._1, q._2), q._3), q._4)
/** Create a new tuple that is this one with a new component on the end */
inline def tup[Z](inline z: Z): (A, B, C, D, Z) = (q._1, q._2, q._3, q._4, z)
/** Create a new tuple that is this one with a new component in position 1 and the rest afterwards */
inline def tup_1[Z](inline z: Z): (Z, A, B, C, D) = (z, q._1, q._2, q._3, q._4)
/** Create a new tuple that is this one with the new component in position 2 and the rest arranged around it in order */
inline def tup_2[Z](inline z: Z): (A, Z, B, C, D) = (q._1, z, q._2, q._3, q._4)
/** Create a new tuple that is this one with the new component in position 3 and the rest arranged around it in order */
inline def tup_3[Z](inline z: Z): (A, B, Z, C, D) = (q._1, q._2, z, q._3, q._4)
/** Create a new tuple that is this one with the new component in position 4 and the rest arranged around it in order */
inline def tup_4[Z](inline z: Z): (A, B, C, Z, D) = (q._1, q._2, q._3, z, q._4)
/** Create a new tuple that is this one plus a value computed with a function of the elements of this tuple. */
inline def tupWith[Z](inline zfn: (A, B, C, D) => Z): (A, B, C, D, Z) = (q._1, q._2, q._3, q._4, zfn(q._1, q._2, q._3, q._4))
/** Cut out the first value of this tuple, creating a new tuple from what"s left. */
inline def snip_1: (B, C, D) = (q._2, q._3, q._4)
/** Cut out the second value of this tuple, creating a new tuple from what"s left. */
inline def snip_2: (A, C, D) = (q._1, q._3, q._4)
/** Cut out the third value of this tuple, creating a new tuple from what"s left. */
inline def snip_3: (A, B, D) = (q._1, q._2, q._4)
/** Cut out the last value of this tuple, creating a new tuple from what"s left. */
inline def snip: (A, B, C) = (q._1, q._2, q._3)
/** Concatenate this tuple with a 2-tuple */
inline def join[Y, Z](p: (Y, Z)): (A, B, C, D, Y, Z) = (q._1, q._2, q._3, q._4, p._1, p._2)
/** Concatenate this tuple with a 3-tuple */
inline def join[X, Y, Z](p: (X, Y, Z)): (A, B, C, D, X, Y, Z) = (q._1, q._2, q._3, q._4, p._1, p._2, p._3)
/** Concatenate this tuple with a 4-tuple */
inline def join[W, X, Y, Z](p: (W, X, Y, Z)): (A, B, C, D, W, X, Y, Z) = (q._1, q._2, q._3, q._4, p._1, p._2, p._3, p._4)
/** Concatenate this tuple with a 5-tuple */
inline def join[V, W, X, Y, Z](p: (V, W, X, Y, Z)): (A, B, C, D, V, W, X, Y, Z) = (q._1, q._2, q._3, q._4, p._1, p._2, p._3, p._4, p._5)
/** Split this tuple after element 1, creating a singleton and a 3-tuple. */
inline def cutAt1: (A, (B, C, D)) = (q._1, (q._2, q._3, q._4))
/** Split this tuple after element 2, creating two 2-tuples. */
inline def cutAt2: ((A, B), (C, D)) = ((q._1, q._2), (q._3, q._4))
/** Split this tuple after element 3, creating a 3-tuple and a singleton. */
inline def cutAt3: ((A, B, C), D) = ((q._1, q._2, q._3), q._4)
}
extension [A, B, C, D, E](q: (A, B, C, D, E)) {
/** Create a new tuple with the first value replaced. */
inline def _1to[Z](inline z: Z): (Z, B, C, D, E) = (z, q._2, q._3, q._4, q._5)
/** Create a new tuple with the first value computed from the old one using a function. */
inline def _1op[Z](inline zfn: A => Z): (Z, B, C, D, E) = (zfn(q._1), q._2, q._3, q._4, q._5)
/** Create a new tuple with the second value replaced. */
inline def _2to[Z](inline z: Z): (A, Z, C, D, E) = (q._1, z, q._3, q._4, q._5)
/** Create a new tuple with the second value computed from the old one using a function. */
inline def _2op[Z](inline zfn: B => Z): (A, Z, C, D, E) = (q._1, zfn(q._2), q._3, q._4, q._5)
/** Create a new tuple with the third value replaced. */
inline def _3to[Z](inline z: Z): (A, B, Z, D, E) = (q._1, q._2, z, q._4, q._5)
/** Create a new tuple with the third value computed from the old one using a function. */
inline def _3op[Z](inline zfn: C => Z): (A, B, Z, D, E) = (q._1, q._2, zfn(q._3), q._4, q._5)
/** Create a new tuple with the fourth value replaced. */
inline def _4to[Z](inline z: Z): (A, B, C, Z, E) = (q._1, q._2, q._3, z, q._5)
/** Create a new tuple with the fourth value computed from the old one using a function. */
inline def _4op[Z](inline zfn: D => Z): (A, B, C, Z, E) = (q._1, q._2, q._3, zfn(q._4), q._5)
/** Create a new tuple with the fifth value replaced. */
inline def _5to[Z](inline z: Z): (A, B, C, D, Z) = (q._1, q._2, q._3, q._4, z)
/** Create a new tuple with the fifth value computed from the old one using a function. */
inline def _5op[Z](inline zfn: E => Z): (A, B, C, D, Z) = (q._1, q._2, q._3, q._4, zfn(q._5))
/** Create a new tuple by applying a different function to each position of this tuple. */
inline def ops[Z, Y, X, W, V](inline az: A => Z, inline by: B => Y, inline cx: C => X, inline dw: D => W, inline ev: E => V): (Z, Y, X, W, V) = (az(q._1), by(q._2), cx(q._3), dw(q._4), ev(q._5))
/** Create a new tuple by applying the same function to each position of this tuple. */
inline def sameOp[Z](zfn: (A | B | C | D | E) => Z): (Z, Z, Z, Z, Z) = (zfn(q._1), zfn(q._2), zfn(q._3), zfn(q._4), zfn(q._5))
/** Pass the values of this tuple into a five-argument function and return the result */
inline def merge[Z](inline zfn: (A, B, C, D, E) => Z): Z = zfn(q._1, q._2, q._3, q._4, q._5)
/** Using a binary operation, reduce this tuple to a single value */
inline def reduce[Z >: A | B | C | D | E](zop: (Z, Z) => Z) = zop(zop(zop(zop(q._1, q._2), q._3), q._4), q._5)
/** Create a new tuple that is this one with a new component on the end */
inline def tup[Z](inline z: Z): (A, B, C, D, E, Z) = (q._1, q._2, q._3, q._4, q._5, z)
/** Create a new tuple that is this one with a new component in position 1 and the rest afterwards */
inline def tup_1[Z](inline z: Z): (Z, A, B, C, D, E) = (z, q._1, q._2, q._3, q._4, q._5)
/** Create a new tuple that is this one with the new component in position 2 and the rest arranged around it in order */
inline def tup_2[Z](inline z: Z): (A, Z, B, C, D, E) = (q._1, z, q._2, q._3, q._4, q._5)
/** Create a new tuple that is this one with the new component in position 3 and the rest arranged around it in order */
inline def tup_3[Z](inline z: Z): (A, B, Z, C, D, E) = (q._1, q._2, z, q._3, q._4, q._5)
/** Create a new tuple that is this one with the new component in position 4 and the rest arranged around it in order */
inline def tup_4[Z](inline z: Z): (A, B, C, Z, D, E) = (q._1, q._2, q._3, z, q._4, q._5)
/** Create a new tuple that is this one with the new component in position 5 and the rest arranged around it in order */
inline def tup_5[Z](inline z: Z): (A, B, C, D, Z, E) = (q._1, q._2, q._3, q._4, z, q._5)
/** Create a new tuple that is this one plus a value computed with a function of the elements of this tuple. */
inline def tupWith[Z](inline zfn: (A, B, C, D, E) => Z): (A, B, C, D, E, Z) = (q._1, q._2, q._3, q._4, q._5, zfn(q._1, q._2, q._3, q._4, q._5))
/** Cut out the first value of this tuple, creating a new tuple from what"s left. */
inline def snip_1: (B, C, D, E) = (q._2, q._3, q._4, q._5)
/** Cut out the second value of this tuple, creating a new tuple from what"s left. */
inline def snip_2: (A, C, D, E) = (q._1, q._3, q._4, q._5)
/** Cut out the third value of this tuple, creating a new tuple from what"s left. */
inline def snip_3: (A, B, D, E) = (q._1, q._2, q._4, q._5)
/** Cut out the fourth value of this tuple, creating a new tuple from what"s left. */
inline def snip_4: (A, B, C, E) = (q._1, q._2, q._3, q._5)
/** Cut out the last value of this tuple, creating a new tuple from what"s left. */
inline def snip: (A, B, C, D) = (q._1, q._2, q._3, q._4)
/** Concatenate this tuple with a 2-tuple */
inline def join[Y, Z](p: (Y, Z)): (A, B, C, D, E, Y, Z) = (q._1, q._2, q._3, q._4, q._5, p._1, p._2)
/** Concatenate this tuple with a 3-tuple */
inline def join[X, Y, Z](p: (X, Y, Z)): (A, B, C, D, E, X, Y, Z) = (q._1, q._2, q._3, q._4, q._5, p._1, p._2, p._3)
/** Concatenate this tuple with a 4-tuple */
inline def join[W, X, Y, Z](p: (W, X, Y, Z)): (A, B, C, D, E, W, X, Y, Z) = (q._1, q._2, q._3, q._4, q._5, p._1, p._2, p._3, p._4)
/** Split this tuple after element 1, creating a singleton and a 4-tuple. */
inline def cutAt1: (A, (B, C, D, E)) = (q._1, (q._2, q._3, q._4, q._5))
/** Split this tuple after element 2, creating a 2-tuple and a 3-tuple. */
inline def cutAt2: ((A, B), (C, D, E)) = ((q._1, q._2), (q._3, q._4, q._5))
/** Split this tuple after element 3, creating a 3-tuple and a 2-tuple. */
inline def cutAt3: ((A, B, C), (D, E)) = ((q._1, q._2, q._3), (q._4, q._5))
/** Split this tuple after element 4, creating a 4-tuple and a singleton. */
inline def cutAt4: ((A, B, C, D), E) = ((q._1, q._2, q._3, q._4), q._5)
}
extension [A, B, C, D, E, F](q: (A, B, C, D, E, F)) {
/** Create a new tuple with the first value replaced. */
inline def _1to[Z](inline z: Z): (Z, B, C, D, E, F) = (z, q._2, q._3, q._4, q._5, q._6)
/** Create a new tuple with the first value computed from the old one using a function. */
inline def _1op[Z](inline zfn: A => Z): (Z, B, C, D, E, F) = (zfn(q._1), q._2, q._3, q._4, q._5, q._6)
/** Create a new tuple with the second value replaced. */
inline def _2to[Z](inline z: Z): (A, Z, C, D, E, F) = (q._1, z, q._3, q._4, q._5, q._6)
/** Create a new tuple with the second value computed from the old one using a function. */
inline def _2op[Z](inline zfn: B => Z): (A, Z, C, D, E, F) = (q._1, zfn(q._2), q._3, q._4, q._5, q._6)
/** Create a new tuple with the third value replaced. */
inline def _3to[Z](inline z: Z): (A, B, Z, D, E, F) = (q._1, q._2, z, q._4, q._5, q._6)
/** Create a new tuple with the third value computed from the old one using a function. */
inline def _3op[Z](inline zfn: C => Z): (A, B, Z, D, E, F) = (q._1, q._2, zfn(q._3), q._4, q._5, q._6)
/** Create a new tuple with the fourth value replaced. */
inline def _4to[Z](inline z: Z): (A, B, C, Z, E, F) = (q._1, q._2, q._3, z, q._5, q._6)
/** Create a new tuple with the fourth value computed from the old one using a function. */
inline def _4op[Z](inline zfn: D => Z): (A, B, C, Z, E, F) = (q._1, q._2, q._3, zfn(q._4), q._5, q._6)
/** Create a new tuple with the fifth value replaced. */
inline def _5to[Z](inline z: Z): (A, B, C, D, Z, F) = (q._1, q._2, q._3, q._4, z, q._6)
/** Create a new tuple with the fifth value computed from the old one using a function. */
inline def _5op[Z](inline zfn: E => Z): (A, B, C, D, Z, F) = (q._1, q._2, q._3, q._4, zfn(q._5), q._6)
/** Create a new tuple with the sixth value replaced. */
inline def _6to[Z](inline z: Z): (A, B, C, D, E, Z) = (q._1, q._2, q._3, q._4, q._5, z)
/** Create a new tuple with the sixth value computed from the old one using a function. */
inline def _6op[Z](inline zfn: F => Z): (A, B, C, D, E, Z) = (q._1, q._2, q._3, q._4, q._5, zfn(q._6))
/** Create a new tuple by applying a different function to each position of this tuple. */
inline def ops[Z, Y, X, W, V, U](inline az: A => Z, inline by: B => Y, inline cx: C => X, inline dw: D => W, inline ev: E => V, inline fu: F => U): (Z, Y, X, W, V, U) = (az(q._1), by(q._2), cx(q._3), dw(q._4), ev(q._5), fu(q._6))
/** Create a new tuple by applying the same function to each position of this tuple. */
inline def sameOp[Z](zfn: (A | B | C | D | E | F) => Z): (Z, Z, Z, Z, Z, Z) = (zfn(q._1), zfn(q._2), zfn(q._3), zfn(q._4), zfn(q._5), zfn(q._6))
/** Pass the values of this tuple into a six-argument function and return the result */
inline def merge[Z](inline zfn: (A, B, C, D, E, F) => Z): Z = zfn(q._1, q._2, q._3, q._4, q._5, q._6)
/** Using a binary operation, reduce this tuple to a single value */
inline def reduce[Z >: A | B | C | D | E | F](zop: (Z, Z) => Z) = zop(zop(zop(zop(zop(q._1, q._2), q._3), q._4), q._5), q._6)
/** Create a new tuple that is this one with a new component on the end */
inline def tup[Z](inline z: Z): (A, B, C, D, E, F, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, z)
/** Create a new tuple that is this one with a new component in position 1 and the rest afterwards */
inline def tup_1[Z](inline z: Z): (Z, A, B, C, D, E, F) = (z, q._1, q._2, q._3, q._4, q._5, q._6)
/** Create a new tuple that is this one with the new component in position 2 and the rest arranged around it in order */
inline def tup_2[Z](inline z: Z): (A, Z, B, C, D, E, F) = (q._1, z, q._2, q._3, q._4, q._5, q._6)
/** Create a new tuple that is this one with the new component in position 3 and the rest arranged around it in order */
inline def tup_3[Z](inline z: Z): (A, B, Z, C, D, E, F) = (q._1, q._2, z, q._3, q._4, q._5, q._6)
/** Create a new tuple that is this one with the new component in position 4 and the rest arranged around it in order */
inline def tup_4[Z](inline z: Z): (A, B, C, Z, D, E, F) = (q._1, q._2, q._3, z, q._4, q._5, q._6)
/** Create a new tuple that is this one with the new component in position 5 and the rest arranged around it in order */
inline def tup_5[Z](inline z: Z): (A, B, C, D, Z, E, F) = (q._1, q._2, q._3, q._4, z, q._5, q._6)
/** Create a new tuple that is this one with the new component in position 6 and the rest arranged around it in order */
inline def tup_6[Z](inline z: Z): (A, B, C, D, E, Z, F) = (q._1, q._2, q._3, q._4, q._5, z, q._6)
/** Create a new tuple that is this one plus a value computed with a function of the elements of this tuple. */
inline def tupWith[Z](inline zfn: (A, B, C, D, E, F) => Z): (A, B, C, D, E, F, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, zfn(q._1, q._2, q._3, q._4, q._5, q._6))
/** Cut out the first value of this tuple, creating a new tuple from what"s left. */
inline def snip_1: (B, C, D, E, F) = (q._2, q._3, q._4, q._5, q._6)
/** Cut out the second value of this tuple, creating a new tuple from what"s left. */
inline def snip_2: (A, C, D, E, F) = (q._1, q._3, q._4, q._5, q._6)
/** Cut out the third value of this tuple, creating a new tuple from what"s left. */
inline def snip_3: (A, B, D, E, F) = (q._1, q._2, q._4, q._5, q._6)
/** Cut out the fourth value of this tuple, creating a new tuple from what"s left. */
inline def snip_4: (A, B, C, E, F) = (q._1, q._2, q._3, q._5, q._6)
/** Cut out the fifth value of this tuple, creating a new tuple from what"s left. */
inline def snip_5: (A, B, C, D, F) = (q._1, q._2, q._3, q._4, q._6)
/** Cut out the last value of this tuple, creating a new tuple from what"s left. */
inline def snip: (A, B, C, D, E) = (q._1, q._2, q._3, q._4, q._5)
/** Concatenate this tuple with a 2-tuple */
inline def join[Y, Z](p: (Y, Z)): (A, B, C, D, E, F, Y, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, p._1, p._2)
/** Concatenate this tuple with a 3-tuple */
inline def join[X, Y, Z](p: (X, Y, Z)): (A, B, C, D, E, F, X, Y, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, p._1, p._2, p._3)
/** Split this tuple after element 1, creating a singleton and a 5-tuple. */
inline def cutAt1: (A, (B, C, D, E, F)) = (q._1, (q._2, q._3, q._4, q._5, q._6))
/** Split this tuple after element 2, creating a 2-tuple and a 4-tuple. */
inline def cutAt2: ((A, B), (C, D, E, F)) = ((q._1, q._2), (q._3, q._4, q._5, q._6))
/** Split this tuple after element 3, creating two 3-tuples. */
inline def cutAt3: ((A, B, C), (D, E, F)) = ((q._1, q._2, q._3), (q._4, q._5, q._6))
/** Split this tuple after element 4, creating a 4-tuple and a 2-tuple. */
inline def cutAt4: ((A, B, C, D), (E, F)) = ((q._1, q._2, q._3, q._4), (q._5, q._6))
/** Split this tuple after element 5, creating a 5-tuple and a singleton. */
inline def cutAt5: ((A, B, C, D, E), F) = ((q._1, q._2, q._3, q._4, q._5), q._6)
}
extension [A, B, C, D, E, F, G](q: (A, B, C, D, E, F, G)) {
/** Create a new tuple with the first value replaced. */
inline def _1to[Z](inline z: Z): (Z, B, C, D, E, F, G) = (z, q._2, q._3, q._4, q._5, q._6, q._7)
/** Create a new tuple with the first value computed from the old one using a function. */
inline def _1op[Z](inline zfn: A => Z): (Z, B, C, D, E, F, G) = (zfn(q._1), q._2, q._3, q._4, q._5, q._6, q._7)
/** Create a new tuple with the second value replaced. */
inline def _2to[Z](inline z: Z): (A, Z, C, D, E, F, G) = (q._1, z, q._3, q._4, q._5, q._6, q._7)
/** Create a new tuple with the second value computed from the old one using a function. */
inline def _2op[Z](inline zfn: B => Z): (A, Z, C, D, E, F, G) = (q._1, zfn(q._2), q._3, q._4, q._5, q._6, q._7)
/** Create a new tuple with the third value replaced. */
inline def _3to[Z](inline z: Z): (A, B, Z, D, E, F, G) = (q._1, q._2, z, q._4, q._5, q._6, q._7)
/** Create a new tuple with the third value computed from the old one using a function. */
inline def _3op[Z](inline zfn: C => Z): (A, B, Z, D, E, F, G) = (q._1, q._2, zfn(q._3), q._4, q._5, q._6, q._7)
/** Create a new tuple with the fourth value replaced. */
inline def _4to[Z](inline z: Z): (A, B, C, Z, E, F, G) = (q._1, q._2, q._3, z, q._5, q._6, q._7)
/** Create a new tuple with the fourth value computed from the old one using a function. */
inline def _4op[Z](inline zfn: D => Z): (A, B, C, Z, E, F, G) = (q._1, q._2, q._3, zfn(q._4), q._5, q._6, q._7)
/** Create a new tuple with the fifth value replaced. */
inline def _5to[Z](inline z: Z): (A, B, C, D, Z, F, G) = (q._1, q._2, q._3, q._4, z, q._6, q._7)
/** Create a new tuple with the fifth value computed from the old one using a function. */
inline def _5op[Z](inline zfn: E => Z): (A, B, C, D, Z, F, G) = (q._1, q._2, q._3, q._4, zfn(q._5), q._6, q._7)
/** Create a new tuple with the sixth value replaced. */
inline def _6to[Z](inline z: Z): (A, B, C, D, E, Z, G) = (q._1, q._2, q._3, q._4, q._5, z, q._7)
/** Create a new tuple with the sixth value computed from the old one using a function. */
inline def _6op[Z](inline zfn: F => Z): (A, B, C, D, E, Z, G) = (q._1, q._2, q._3, q._4, q._5, zfn(q._6), q._7)
/** Create a new tuple with the seventh value replaced. */
inline def _7to[Z](inline z: Z): (A, B, C, D, E, F, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, z)
/** Create a new tuple with the seventh value computed from the old one using a function. */
inline def _7op[Z](inline zfn: G => Z): (A, B, C, D, E, F, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, zfn(q._7))
/** Create a new tuple by applying a different function to each position of this tuple. */
inline def ops[Z, Y, X, W, V, U, T](inline az: A => Z, inline by: B => Y, inline cx: C => X, inline dw: D => W, inline ev: E => V, inline fu: F => U, inline gt: G => T): (Z, Y, X, W, V, U, T) = (az(q._1), by(q._2), cx(q._3), dw(q._4), ev(q._5), fu(q._6), gt(q._7))
/** Create a new tuple by applying the same function to each position of this tuple. */
inline def sameOp[Z](zfn: (A | B | C | D | E | F | G) => Z): (Z, Z, Z, Z, Z, Z, Z) = (zfn(q._1), zfn(q._2), zfn(q._3), zfn(q._4), zfn(q._5), zfn(q._6), zfn(q._7))
/** Pass the values of this tuple into a seven-argument function and return the result */
inline def merge[Z](inline zfn: (A, B, C, D, E, F, G) => Z): Z = zfn(q._1, q._2, q._3, q._4, q._5, q._6, q._7)
/** Using a binary operation, reduce this tuple to a single value */
inline def reduce[Z >: A | B | C | D | E | F | G](zop: (Z, Z) => Z) = zop(zop(zop(zop(zop(zop(q._1, q._2), q._3), q._4), q._5), q._6), q._7)
/** Create a new tuple that is this one with a new component on the end */
inline def tup[Z](inline z: Z): (A, B, C, D, E, F, G, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, z)
/** Create a new tuple that is this one with a new component in position 1 and the rest afterwards */
inline def tup_1[Z](inline z: Z): (Z, A, B, C, D, E, F, G) = (z, q._1, q._2, q._3, q._4, q._5, q._6, q._7)
/** Create a new tuple that is this one with the new component in position 2 and the rest arranged around it in order */
inline def tup_2[Z](inline z: Z): (A, Z, B, C, D, E, F, G) = (q._1, z, q._2, q._3, q._4, q._5, q._6, q._7)
/** Create a new tuple that is this one with the new component in position 3 and the rest arranged around it in order */
inline def tup_3[Z](inline z: Z): (A, B, Z, C, D, E, F, G) = (q._1, q._2, z, q._3, q._4, q._5, q._6, q._7)
/** Create a new tuple that is this one with the new component in position 4 and the rest arranged around it in order */
inline def tup_4[Z](inline z: Z): (A, B, C, Z, D, E, F, G) = (q._1, q._2, q._3, z, q._4, q._5, q._6, q._7)
/** Create a new tuple that is this one with the new component in position 5 and the rest arranged around it in order */
inline def tup_5[Z](inline z: Z): (A, B, C, D, Z, E, F, G) = (q._1, q._2, q._3, q._4, z, q._5, q._6, q._7)
/** Create a new tuple that is this one with the new component in position 6 and the rest arranged around it in order */
inline def tup_6[Z](inline z: Z): (A, B, C, D, E, Z, F, G) = (q._1, q._2, q._3, q._4, q._5, z, q._6, q._7)
/** Create a new tuple that is this one with the new component in position 7 and the rest arranged around it in order */
inline def tup_7[Z](inline z: Z): (A, B, C, D, E, F, Z, G) = (q._1, q._2, q._3, q._4, q._5, q._6, z, q._7)
/** Create a new tuple that is this one plus a value computed with a function of the elements of this tuple. */
inline def tupWith[Z](inline zfn: (A, B, C, D, E, F, G) => Z): (A, B, C, D, E, F, G, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, zfn(q._1, q._2, q._3, q._4, q._5, q._6, q._7))
/** Cut out the first value of this tuple, creating a new tuple from what"s left. */
inline def snip_1: (B, C, D, E, F, G) = (q._2, q._3, q._4, q._5, q._6, q._7)
/** Cut out the second value of this tuple, creating a new tuple from what"s left. */
inline def snip_2: (A, C, D, E, F, G) = (q._1, q._3, q._4, q._5, q._6, q._7)
/** Cut out the third value of this tuple, creating a new tuple from what"s left. */
inline def snip_3: (A, B, D, E, F, G) = (q._1, q._2, q._4, q._5, q._6, q._7)
/** Cut out the fourth value of this tuple, creating a new tuple from what"s left. */
inline def snip_4: (A, B, C, E, F, G) = (q._1, q._2, q._3, q._5, q._6, q._7)
/** Cut out the fifth value of this tuple, creating a new tuple from what"s left. */
inline def snip_5: (A, B, C, D, F, G) = (q._1, q._2, q._3, q._4, q._6, q._7)
/** Cut out the sixth value of this tuple, creating a new tuple from what"s left. */
inline def snip_6: (A, B, C, D, E, G) = (q._1, q._2, q._3, q._4, q._5, q._7)
/** Cut out the last value of this tuple, creating a new tuple from what"s left. */
inline def snip: (A, B, C, D, E, F) = (q._1, q._2, q._3, q._4, q._5, q._6)
/** Concatenate this tuple with a 2-tuple */
inline def join[Y, Z](p: (Y, Z)): (A, B, C, D, E, F, G, Y, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, p._1, p._2)
/** Split this tuple after element 1, creating a singleton and a 6-tuple. */
inline def cutAt1: (A, (B, C, D, E, F, G)) = (q._1, (q._2, q._3, q._4, q._5, q._6, q._7))
/** Split this tuple after element 2, creating a 2-tuple and a 5-tuple. */
inline def cutAt2: ((A, B), (C, D, E, F, G)) = ((q._1, q._2), (q._3, q._4, q._5, q._6, q._7))
/** Split this tuple after element 3, creating a 3-tuple and a 4-tuple. */
inline def cutAt3: ((A, B, C), (D, E, F, G)) = ((q._1, q._2, q._3), (q._4, q._5, q._6, q._7))
/** Split this tuple after element 4, creating a 4-tuple and a 3-tuple. */
inline def cutAt4: ((A, B, C, D), (E, F, G)) = ((q._1, q._2, q._3, q._4), (q._5, q._6, q._7))
/** Split this tuple after element 5, creating a 5-tuple and a 2-tuple. */
inline def cutAt5: ((A, B, C, D, E), (F, G)) = ((q._1, q._2, q._3, q._4, q._5), (q._6, q._7))
/** Split this tuple after element 6, creating a 6-tuple and a singleton. */
inline def cutAt6: ((A, B, C, D, E, F), G) = ((q._1, q._2, q._3, q._4, q._5, q._6), q._7)
}
extension [A, B, C, D, E, F, G, H](q: (A, B, C, D, E, F, G, H)) {
/** Create a new tuple with the first value replaced. */
inline def _1to[Z](inline z: Z): (Z, B, C, D, E, F, G, H) = (z, q._2, q._3, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple with the first value computed from the old one using a function. */
inline def _1op[Z](inline zfn: A => Z): (Z, B, C, D, E, F, G, H) = (zfn(q._1), q._2, q._3, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple with the second value replaced. */
inline def _2to[Z](inline z: Z): (A, Z, C, D, E, F, G, H) = (q._1, z, q._3, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple with the second value computed from the old one using a function. */
inline def _2op[Z](inline zfn: B => Z): (A, Z, C, D, E, F, G, H) = (q._1, zfn(q._2), q._3, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple with the third value replaced. */
inline def _3to[Z](inline z: Z): (A, B, Z, D, E, F, G, H) = (q._1, q._2, z, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple with the third value computed from the old one using a function. */
inline def _3op[Z](inline zfn: C => Z): (A, B, Z, D, E, F, G, H) = (q._1, q._2, zfn(q._3), q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple with the fourth value replaced. */
inline def _4to[Z](inline z: Z): (A, B, C, Z, E, F, G, H) = (q._1, q._2, q._3, z, q._5, q._6, q._7, q._8)
/** Create a new tuple with the fourth value computed from the old one using a function. */
inline def _4op[Z](inline zfn: D => Z): (A, B, C, Z, E, F, G, H) = (q._1, q._2, q._3, zfn(q._4), q._5, q._6, q._7, q._8)
/** Create a new tuple with the fifth value replaced. */
inline def _5to[Z](inline z: Z): (A, B, C, D, Z, F, G, H) = (q._1, q._2, q._3, q._4, z, q._6, q._7, q._8)
/** Create a new tuple with the fifth value computed from the old one using a function. */
inline def _5op[Z](inline zfn: E => Z): (A, B, C, D, Z, F, G, H) = (q._1, q._2, q._3, q._4, zfn(q._5), q._6, q._7, q._8)
/** Create a new tuple with the sixth value replaced. */
inline def _6to[Z](inline z: Z): (A, B, C, D, E, Z, G, H) = (q._1, q._2, q._3, q._4, q._5, z, q._7, q._8)
/** Create a new tuple with the sixth value computed from the old one using a function. */
inline def _6op[Z](inline zfn: F => Z): (A, B, C, D, E, Z, G, H) = (q._1, q._2, q._3, q._4, q._5, zfn(q._6), q._7, q._8)
/** Create a new tuple with the seventh value replaced. */
inline def _7to[Z](inline z: Z): (A, B, C, D, E, F, Z, H) = (q._1, q._2, q._3, q._4, q._5, q._6, z, q._8)
/** Create a new tuple with the seventh value computed from the old one using a function. */
inline def _7op[Z](inline zfn: G => Z): (A, B, C, D, E, F, Z, H) = (q._1, q._2, q._3, q._4, q._5, q._6, zfn(q._7), q._8)
/** Create a new tuple with the eighth value replaced. */
inline def _8to[Z](inline z: Z): (A, B, C, D, E, F, G, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, z)
/** Create a new tuple with the eighth value computed from the old one using a function. */
inline def _8op[Z](inline zfn: H => Z): (A, B, C, D, E, F, G, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, zfn(q._8))
/** Create a new tuple by applying a different function to each position of this tuple. */
inline def ops[Z, Y, X, W, V, U, T, S](inline az: A => Z, inline by: B => Y, inline cx: C => X, inline dw: D => W, inline ev: E => V, inline fu: F => U, inline gt: G => T, inline hs: H => S): (Z, Y, X, W, V, U, T, S) = (az(q._1), by(q._2), cx(q._3), dw(q._4), ev(q._5), fu(q._6), gt(q._7), hs(q._8))
/** Create a new tuple by applying the same function to each position of this tuple. */
inline def sameOp[Z](zfn: (A | B | C | D | E | F | G | H) => Z): (Z, Z, Z, Z, Z, Z, Z, Z) = (zfn(q._1), zfn(q._2), zfn(q._3), zfn(q._4), zfn(q._5), zfn(q._6), zfn(q._7), zfn(q._8))
/** Pass the values of this tuple into an eight-argument function and return the result */
inline def merge[Z](inline zfn: (A, B, C, D, E, F, G, H) => Z): Z = zfn(q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8)
/** Using a binary operation, reduce this tuple to a single value */
inline def reduce[Z >: A | B | C | D | E | F | G | H](zop: (Z, Z) => Z) = zop(zop(zop(zop(zop(zop(zop(q._1, q._2), q._3), q._4), q._5), q._6), q._7), q._8)
/** Create a new tuple that is this one with a new component on the end */
inline def tup[Z](inline z: Z): (A, B, C, D, E, F, G, H, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8, z)
/** Create a new tuple that is this one with a new component in position 1 and the rest afterwards */
inline def tup_1[Z](inline z: Z): (Z, A, B, C, D, E, F, G, H) = (z, q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple that is this one with the new component in position 2 and the rest arranged around it in order */
inline def tup_2[Z](inline z: Z): (A, Z, B, C, D, E, F, G, H) = (q._1, z, q._2, q._3, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple that is this one with the new component in position 3 and the rest arranged around it in order */
inline def tup_3[Z](inline z: Z): (A, B, Z, C, D, E, F, G, H) = (q._1, q._2, z, q._3, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple that is this one with the new component in position 4 and the rest arranged around it in order */
inline def tup_4[Z](inline z: Z): (A, B, C, Z, D, E, F, G, H) = (q._1, q._2, q._3, z, q._4, q._5, q._6, q._7, q._8)
/** Create a new tuple that is this one with the new component in position 5 and the rest arranged around it in order */
inline def tup_5[Z](inline z: Z): (A, B, C, D, Z, E, F, G, H) = (q._1, q._2, q._3, q._4, z, q._5, q._6, q._7, q._8)
/** Create a new tuple that is this one with the new component in position 6 and the rest arranged around it in order */
inline def tup_6[Z](inline z: Z): (A, B, C, D, E, Z, F, G, H) = (q._1, q._2, q._3, q._4, q._5, z, q._6, q._7, q._8)
/** Create a new tuple that is this one with the new component in position 7 and the rest arranged around it in order */
inline def tup_7[Z](inline z: Z): (A, B, C, D, E, F, Z, G, H) = (q._1, q._2, q._3, q._4, q._5, q._6, z, q._7, q._8)
/** Create a new tuple that is this one with the new component in position 8 and the rest arranged around it in order */
inline def tup_8[Z](inline z: Z): (A, B, C, D, E, F, G, Z, H) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, z, q._8)
/** Create a new tuple that is this one plus a value computed with a function of the elements of this tuple. */
inline def tupWith[Z](inline zfn: (A, B, C, D, E, F, G, H) => Z): (A, B, C, D, E, F, G, H, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8, zfn(q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8))
/** Cut out the first value of this tuple, creating a new tuple from what"s left. */
inline def snip_1: (B, C, D, E, F, G, H) = (q._2, q._3, q._4, q._5, q._6, q._7, q._8)
/** Cut out the second value of this tuple, creating a new tuple from what"s left. */
inline def snip_2: (A, C, D, E, F, G, H) = (q._1, q._3, q._4, q._5, q._6, q._7, q._8)
/** Cut out the third value of this tuple, creating a new tuple from what"s left. */
inline def snip_3: (A, B, D, E, F, G, H) = (q._1, q._2, q._4, q._5, q._6, q._7, q._8)
/** Cut out the fourth value of this tuple, creating a new tuple from what"s left. */
inline def snip_4: (A, B, C, E, F, G, H) = (q._1, q._2, q._3, q._5, q._6, q._7, q._8)
/** Cut out the fifth value of this tuple, creating a new tuple from what"s left. */
inline def snip_5: (A, B, C, D, F, G, H) = (q._1, q._2, q._3, q._4, q._6, q._7, q._8)
/** Cut out the sixth value of this tuple, creating a new tuple from what"s left. */
inline def snip_6: (A, B, C, D, E, G, H) = (q._1, q._2, q._3, q._4, q._5, q._7, q._8)
/** Cut out the seventh value of this tuple, creating a new tuple from what"s left. */
inline def snip_7: (A, B, C, D, E, F, H) = (q._1, q._2, q._3, q._4, q._5, q._6, q._8)
/** Cut out the last value of this tuple, creating a new tuple from what"s left. */
inline def snip: (A, B, C, D, E, F, G) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7)
/** Split this tuple after element 1, creating a singleton and a 7-tuple. */
inline def cutAt1: (A, (B, C, D, E, F, G, H)) = (q._1, (q._2, q._3, q._4, q._5, q._6, q._7, q._8))
/** Split this tuple after element 2, creating a 2-tuple and a 6-tuple. */
inline def cutAt2: ((A, B), (C, D, E, F, G, H)) = ((q._1, q._2), (q._3, q._4, q._5, q._6, q._7, q._8))
/** Split this tuple after element 3, creating a 3-tuple and a 5-tuple. */
inline def cutAt3: ((A, B, C), (D, E, F, G, H)) = ((q._1, q._2, q._3), (q._4, q._5, q._6, q._7, q._8))
/** Split this tuple after element 4, creating two 4-tuples. */
inline def cutAt4: ((A, B, C, D), (E, F, G, H)) = ((q._1, q._2, q._3, q._4), (q._5, q._6, q._7, q._8))
/** Split this tuple after element 5, creating a 5-tuple and a 3-tuple. */
inline def cutAt5: ((A, B, C, D, E), (F, G, H)) = ((q._1, q._2, q._3, q._4, q._5), (q._6, q._7, q._8))
/** Split this tuple after element 6, creating a 6-tuple and a 2-tuple. */
inline def cutAt6: ((A, B, C, D, E, F), (G, H)) = ((q._1, q._2, q._3, q._4, q._5, q._6), (q._7, q._8))
/** Split this tuple after element 7, creating a 7-tuple and a singleton. */
inline def cutAt7: ((A, B, C, D, E, F, G), H) = ((q._1, q._2, q._3, q._4, q._5, q._6, q._7), q._8)
}
extension [A, B, C, D, E, F, G, H, I](q: (A, B, C, D, E, F, G, H, I)) {
/** Create a new tuple with the first value replaced. */
inline def _1to[Z](inline z: Z): (Z, B, C, D, E, F, G, H, I) = (z, q._2, q._3, q._4, q._5, q._6, q._7, q._8, q._9)
/** Create a new tuple with the first value computed from the old one using a function. */
inline def _1op[Z](inline zfn: A => Z): (Z, B, C, D, E, F, G, H, I) = (zfn(q._1), q._2, q._3, q._4, q._5, q._6, q._7, q._8, q._9)
/** Create a new tuple with the second value replaced. */
inline def _2to[Z](inline z: Z): (A, Z, C, D, E, F, G, H, I) = (q._1, z, q._3, q._4, q._5, q._6, q._7, q._8, q._9)
/** Create a new tuple with the second value computed from the old one using a function. */
inline def _2op[Z](inline zfn: B => Z): (A, Z, C, D, E, F, G, H, I) = (q._1, zfn(q._2), q._3, q._4, q._5, q._6, q._7, q._8, q._9)
/** Create a new tuple with the third value replaced. */
inline def _3to[Z](inline z: Z): (A, B, Z, D, E, F, G, H, I) = (q._1, q._2, z, q._4, q._5, q._6, q._7, q._8, q._9)
/** Create a new tuple with the third value computed from the old one using a function. */
inline def _3op[Z](inline zfn: C => Z): (A, B, Z, D, E, F, G, H, I) = (q._1, q._2, zfn(q._3), q._4, q._5, q._6, q._7, q._8, q._9)
/** Create a new tuple with the fourth value replaced. */
inline def _4to[Z](inline z: Z): (A, B, C, Z, E, F, G, H, I) = (q._1, q._2, q._3, z, q._5, q._6, q._7, q._8, q._9)
/** Create a new tuple with the fourth value computed from the old one using a function. */
inline def _4op[Z](inline zfn: D => Z): (A, B, C, Z, E, F, G, H, I) = (q._1, q._2, q._3, zfn(q._4), q._5, q._6, q._7, q._8, q._9)
/** Create a new tuple with the fifth value replaced. */
inline def _5to[Z](inline z: Z): (A, B, C, D, Z, F, G, H, I) = (q._1, q._2, q._3, q._4, z, q._6, q._7, q._8, q._9)
/** Create a new tuple with the fifth value computed from the old one using a function. */
inline def _5op[Z](inline zfn: E => Z): (A, B, C, D, Z, F, G, H, I) = (q._1, q._2, q._3, q._4, zfn(q._5), q._6, q._7, q._8, q._9)
/** Create a new tuple with the sixth value replaced. */
inline def _6to[Z](inline z: Z): (A, B, C, D, E, Z, G, H, I) = (q._1, q._2, q._3, q._4, q._5, z, q._7, q._8, q._9)
/** Create a new tuple with the sixth value computed from the old one using a function. */
inline def _6op[Z](inline zfn: F => Z): (A, B, C, D, E, Z, G, H, I) = (q._1, q._2, q._3, q._4, q._5, zfn(q._6), q._7, q._8, q._9)
/** Create a new tuple with the seventh value replaced. */
inline def _7to[Z](inline z: Z): (A, B, C, D, E, F, Z, H, I) = (q._1, q._2, q._3, q._4, q._5, q._6, z, q._8, q._9)
/** Create a new tuple with the seventh value computed from the old one using a function. */
inline def _7op[Z](inline zfn: G => Z): (A, B, C, D, E, F, Z, H, I) = (q._1, q._2, q._3, q._4, q._5, q._6, zfn(q._7), q._8, q._9)
/** Create a new tuple with the eigth value replaced. */
inline def _8to[Z](inline z: Z): (A, B, C, D, E, F, G, Z, I) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, z, q._9)
/** Create a new tuple with the eigth value computed from the old one using a function. */
inline def _8op[Z](inline zfn: H => Z): (A, B, C, D, E, F, G, Z, I) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, zfn(q._8), q._9)
/** Create a new tuple with the ninth value replaced. */
inline def _9to[Z](inline z: Z): (A, B, C, D, E, F, G, H, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8, z)
/** Create a new tuple with the ninth value computed from the old one using a function. */
inline def _9op[Z](inline zfn: I => Z): (A, B, C, D, E, F, G, H, Z) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8, zfn(q._9))
/** Create a new tuple by applying a different function to each position of this tuple. */
inline def ops[Z, Y, X, W, V, U, T, S, R](inline az: A => Z, inline by: B => Y, inline cx: C => X, inline dw: D => W, inline ev: E => V, inline fu: F => U, inline gt: G => T, inline hs: H => S, inline ir: I => R): (Z, Y, X, W, V, U, T, S, R) = (az(q._1), by(q._2), cx(q._3), dw(q._4), ev(q._5), fu(q._6), gt(q._7), hs(q._8), ir(q._9))
/** Create a new tuple by applying the same function to each position of this tuple. */
inline def sameOp[Z](zfn: (A | B | C | D | E | F | G | H | I) => Z): (Z, Z, Z, Z, Z, Z, Z, Z, Z) = (zfn(q._1), zfn(q._2), zfn(q._3), zfn(q._4), zfn(q._5), zfn(q._6), zfn(q._7), zfn(q._8), zfn(q._9))
/** Pass the values of this tuple into a nine-argument function and return the result */
inline def merge[Z](inline zfn: (A, B, C, D, E, F, G, H, I) => Z): Z = zfn(q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8, q._9)
/** Using a binary operation, reduce this tuple to a single value */
inline def reduce[Z >: A | B | C | D | E | F | G | H | I](zop: (Z, Z) => Z) = zop(zop(zop(zop(zop(zop(zop(zop(q._1, q._2), q._3), q._4), q._5), q._6), q._7), q._8), q._9)
/** Cut out the first value of this tuple, creating a new tuple from what"s left. */
inline def snip_1: (B, C, D, E, F, G, H, I) = (q._2, q._3, q._4, q._5, q._6, q._7, q._8, q._9)
/** Cut out the second value of this tuple, creating a new tuple from what"s left. */
inline def snip_2: (A, C, D, E, F, G, H, I) = (q._1, q._3, q._4, q._5, q._6, q._7, q._8, q._9)
/** Cut out the third value of this tuple, creating a new tuple from what"s left. */
inline def snip_3: (A, B, D, E, F, G, H, I) = (q._1, q._2, q._4, q._5, q._6, q._7, q._8, q._9)
/** Cut out the fourth value of this tuple, creating a new tuple from what"s left. */
inline def snip_4: (A, B, C, E, F, G, H, I) = (q._1, q._2, q._3, q._5, q._6, q._7, q._8, q._9)
/** Cut out the fifth value of this tuple, creating a new tuple from what"s left. */
inline def snip_5: (A, B, C, D, F, G, H, I) = (q._1, q._2, q._3, q._4, q._6, q._7, q._8, q._9)
/** Cut out the sixth value of this tuple, creating a new tuple from what"s left. */
inline def snip_6: (A, B, C, D, E, G, H, I) = (q._1, q._2, q._3, q._4, q._5, q._7, q._8, q._9)
/** Cut out the seventh value of this tuple, creating a new tuple from what"s left. */
inline def snip_7: (A, B, C, D, E, F, H, I) = (q._1, q._2, q._3, q._4, q._5, q._6, q._8, q._9)
/** Cut out the eigth value of this tuple, creating a new tuple from what"s left. */
inline def snip_8: (A, B, C, D, E, F, G, I) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._9)
/** Cut out the ninth value of this tuple, creating a new tuple from what"s left. */
inline def snip: (A, B, C, D, E, F, G, H) = (q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8)
/** Split this tuple after element 1, creating a singleton and a 7-tuple. */
inline def cutAt1: (A, (B, C, D, E, F, G, H, I)) = (q._1, (q._2, q._3, q._4, q._5, q._6, q._7, q._8, q._9))
/** Split this tuple after element 2, creating a 2-tuple and a 7-tuple. */
inline def cutAt2: ((A, B), (C, D, E, F, G, H, I)) = ((q._1, q._2), (q._3, q._4, q._5, q._6, q._7, q._8, q._9))
/** Split this tuple after element 3, creating a 3-tuple and a 6-tuple. */
inline def cutAt3: ((A, B, C), (D, E, F, G, H, I)) = ((q._1, q._2, q._3), (q._4, q._5, q._6, q._7, q._8, q._9))
/** Split this tuple after element 4, creating a 4-tuple and a 5-tuple. */
inline def cutAt4: ((A, B, C, D), (E, F, G, H, I)) = ((q._1, q._2, q._3, q._4), (q._5, q._6, q._7, q._8, q._9))
/** Split this tuple after element 5, creating a 5-tuple and a 4-tuple. */
inline def cutAt5: ((A, B, C, D, E), (F, G, H, I)) = ((q._1, q._2, q._3, q._4, q._5), (q._6, q._7, q._8, q._9))
/** Split this tuple after element 6, creating a 6-tuple and a 3-tuple. */
inline def cutAt6: ((A, B, C, D, E, F), (G, H, I)) = ((q._1, q._2, q._3, q._4, q._5, q._6), (q._7, q._8, q._9))
/** Split this tuple after element 7, creating a 7-tuple and a 2-tuple. */
inline def cutAt7: ((A, B, C, D, E, F, G), (H, I)) = ((q._1, q._2, q._3, q._4, q._5, q._6, q._7), (q._8, q._9))
/** Split this tuple after element 8, creating an 8-tuple and a singleton. */
inline def cutAt8: ((A, B, C, D, E, F, G, H), I) = ((q._1, q._2, q._3, q._4, q._5, q._6, q._7, q._8), q._9)
}