package kantan.csv

trait GeneratedRowDecoders {
  def decoder1[A1, R](f: (A1) ⇒ R)(i1: Int)(implicit a1: CellDecoder[A1]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
    } yield f(f1))
  def decoder2[A1, A2, R](f: (A1, A2) ⇒ R)(i1: Int, i2: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
    } yield f(f1, f2))
  def decoder3[A1, A2, A3, R](f: (A1, A2, A3) ⇒ R)(i1: Int, i2: Int, i3: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
    } yield f(f1, f2, f3))
  def decoder4[A1, A2, A3, A4, R](f: (A1, A2, A3, A4) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
    } yield f(f1, f2, f3, f4))
  def decoder5[A1, A2, A3, A4, A5, R](f: (A1, A2, A3, A4, A5) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
    } yield f(f1, f2, f3, f4, f5))
  def decoder6[A1, A2, A3, A4, A5, A6, R](f: (A1, A2, A3, A4, A5, A6) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
    } yield f(f1, f2, f3, f4, f5, f6))
  def decoder7[A1, A2, A3, A4, A5, A6, A7, R](f: (A1, A2, A3, A4, A5, A6, A7) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
    } yield f(f1, f2, f3, f4, f5, f6, f7))
  def decoder8[A1, A2, A3, A4, A5, A6, A7, A8, R](f: (A1, A2, A3, A4, A5, A6, A7, A8) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8))
  def decoder9[A1, A2, A3, A4, A5, A6, A7, A8, A9, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9))
  def decoder10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10))
  def decoder11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11))
  def decoder12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12))
  def decoder13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13))
  def decoder14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14))
  def decoder15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int, i15: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14], a15: CellDecoder[A15]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
      f15 ← a15.decode(ss, i15)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15))
  def decoder16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int, i15: Int, i16: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14], a15: CellDecoder[A15], a16: CellDecoder[A16]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
      f15 ← a15.decode(ss, i15)
      f16 ← a16.decode(ss, i16)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16))
  def decoder17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int, i15: Int, i16: Int, i17: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14], a15: CellDecoder[A15], a16: CellDecoder[A16], a17: CellDecoder[A17]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
      f15 ← a15.decode(ss, i15)
      f16 ← a16.decode(ss, i16)
      f17 ← a17.decode(ss, i17)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17))
  def decoder18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int, i15: Int, i16: Int, i17: Int, i18: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14], a15: CellDecoder[A15], a16: CellDecoder[A16], a17: CellDecoder[A17], a18: CellDecoder[A18]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
      f15 ← a15.decode(ss, i15)
      f16 ← a16.decode(ss, i16)
      f17 ← a17.decode(ss, i17)
      f18 ← a18.decode(ss, i18)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18))
  def decoder19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int, i15: Int, i16: Int, i17: Int, i18: Int, i19: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14], a15: CellDecoder[A15], a16: CellDecoder[A16], a17: CellDecoder[A17], a18: CellDecoder[A18], a19: CellDecoder[A19]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
      f15 ← a15.decode(ss, i15)
      f16 ← a16.decode(ss, i16)
      f17 ← a17.decode(ss, i17)
      f18 ← a18.decode(ss, i18)
      f19 ← a19.decode(ss, i19)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19))
  def decoder20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int, i15: Int, i16: Int, i17: Int, i18: Int, i19: Int, i20: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14], a15: CellDecoder[A15], a16: CellDecoder[A16], a17: CellDecoder[A17], a18: CellDecoder[A18], a19: CellDecoder[A19], a20: CellDecoder[A20]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
      f15 ← a15.decode(ss, i15)
      f16 ← a16.decode(ss, i16)
      f17 ← a17.decode(ss, i17)
      f18 ← a18.decode(ss, i18)
      f19 ← a19.decode(ss, i19)
      f20 ← a20.decode(ss, i20)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20))
  def decoder21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int, i15: Int, i16: Int, i17: Int, i18: Int, i19: Int, i20: Int, i21: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14], a15: CellDecoder[A15], a16: CellDecoder[A16], a17: CellDecoder[A17], a18: CellDecoder[A18], a19: CellDecoder[A19], a20: CellDecoder[A20], a21: CellDecoder[A21]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
      f15 ← a15.decode(ss, i15)
      f16 ← a16.decode(ss, i16)
      f17 ← a17.decode(ss, i17)
      f18 ← a18.decode(ss, i18)
      f19 ← a19.decode(ss, i19)
      f20 ← a20.decode(ss, i20)
      f21 ← a21.decode(ss, i21)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21))
  def decoder22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, R](f: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22) ⇒ R)(i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, i7: Int, i8: Int, i9: Int, i10: Int, i11: Int, i12: Int, i13: Int, i14: Int, i15: Int, i16: Int, i17: Int, i18: Int, i19: Int, i20: Int, i21: Int, i22: Int)(implicit a1: CellDecoder[A1], a2: CellDecoder[A2], a3: CellDecoder[A3], a4: CellDecoder[A4], a5: CellDecoder[A5], a6: CellDecoder[A6], a7: CellDecoder[A7], a8: CellDecoder[A8], a9: CellDecoder[A9], a10: CellDecoder[A10], a11: CellDecoder[A11], a12: CellDecoder[A12], a13: CellDecoder[A13], a14: CellDecoder[A14], a15: CellDecoder[A15], a16: CellDecoder[A16], a17: CellDecoder[A17], a18: CellDecoder[A18], a19: CellDecoder[A19], a20: CellDecoder[A20], a21: CellDecoder[A21], a22: CellDecoder[A22]): RowDecoder[R] =
    RowDecoder(ss ⇒ for {
      f1 ← a1.decode(ss, i1)
      f2 ← a2.decode(ss, i2)
      f3 ← a3.decode(ss, i3)
      f4 ← a4.decode(ss, i4)
      f5 ← a5.decode(ss, i5)
      f6 ← a6.decode(ss, i6)
      f7 ← a7.decode(ss, i7)
      f8 ← a8.decode(ss, i8)
      f9 ← a9.decode(ss, i9)
      f10 ← a10.decode(ss, i10)
      f11 ← a11.decode(ss, i11)
      f12 ← a12.decode(ss, i12)
      f13 ← a13.decode(ss, i13)
      f14 ← a14.decode(ss, i14)
      f15 ← a15.decode(ss, i15)
      f16 ← a16.decode(ss, i16)
      f17 ← a17.decode(ss, i17)
      f18 ← a18.decode(ss, i18)
      f19 ← a19.decode(ss, i19)
      f20 ← a20.decode(ss, i20)
      f21 ← a21.decode(ss, i21)
      f22 ← a22.decode(ss, i22)
    } yield f(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22))

  implicit def tuple1[A1: CellDecoder]: RowDecoder[Tuple1[A1]] =
    decoder1(Tuple1.apply[A1])(0)
  implicit def tuple2[A1: CellDecoder, A2: CellDecoder]: RowDecoder[Tuple2[A1, A2]] =
    decoder2(Tuple2.apply[A1, A2])(0, 1)
  implicit def tuple3[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder]: RowDecoder[Tuple3[A1, A2, A3]] =
    decoder3(Tuple3.apply[A1, A2, A3])(0, 1, 2)
  implicit def tuple4[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder]: RowDecoder[Tuple4[A1, A2, A3, A4]] =
    decoder4(Tuple4.apply[A1, A2, A3, A4])(0, 1, 2, 3)
  implicit def tuple5[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder]: RowDecoder[Tuple5[A1, A2, A3, A4, A5]] =
    decoder5(Tuple5.apply[A1, A2, A3, A4, A5])(0, 1, 2, 3, 4)
  implicit def tuple6[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder]: RowDecoder[Tuple6[A1, A2, A3, A4, A5, A6]] =
    decoder6(Tuple6.apply[A1, A2, A3, A4, A5, A6])(0, 1, 2, 3, 4, 5)
  implicit def tuple7[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder]: RowDecoder[Tuple7[A1, A2, A3, A4, A5, A6, A7]] =
    decoder7(Tuple7.apply[A1, A2, A3, A4, A5, A6, A7])(0, 1, 2, 3, 4, 5, 6)
  implicit def tuple8[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder]: RowDecoder[Tuple8[A1, A2, A3, A4, A5, A6, A7, A8]] =
    decoder8(Tuple8.apply[A1, A2, A3, A4, A5, A6, A7, A8])(0, 1, 2, 3, 4, 5, 6, 7)
  implicit def tuple9[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder]: RowDecoder[Tuple9[A1, A2, A3, A4, A5, A6, A7, A8, A9]] =
    decoder9(Tuple9.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9])(0, 1, 2, 3, 4, 5, 6, 7, 8)
  implicit def tuple10[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder]: RowDecoder[Tuple10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]] =
    decoder10(Tuple10.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  implicit def tuple11[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder]: RowDecoder[Tuple11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11]] =
    decoder11(Tuple11.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  implicit def tuple12[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder]: RowDecoder[Tuple12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12]] =
    decoder12(Tuple12.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
  implicit def tuple13[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder]: RowDecoder[Tuple13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13]] =
    decoder13(Tuple13.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
  implicit def tuple14[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder]: RowDecoder[Tuple14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14]] =
    decoder14(Tuple14.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
  implicit def tuple15[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder, A15: CellDecoder]: RowDecoder[Tuple15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15]] =
    decoder15(Tuple15.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
  implicit def tuple16[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder, A15: CellDecoder, A16: CellDecoder]: RowDecoder[Tuple16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16]] =
    decoder16(Tuple16.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
  implicit def tuple17[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder, A15: CellDecoder, A16: CellDecoder, A17: CellDecoder]: RowDecoder[Tuple17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17]] =
    decoder17(Tuple17.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
  implicit def tuple18[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder, A15: CellDecoder, A16: CellDecoder, A17: CellDecoder, A18: CellDecoder]: RowDecoder[Tuple18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18]] =
    decoder18(Tuple18.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)
  implicit def tuple19[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder, A15: CellDecoder, A16: CellDecoder, A17: CellDecoder, A18: CellDecoder, A19: CellDecoder]: RowDecoder[Tuple19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19]] =
    decoder19(Tuple19.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
  implicit def tuple20[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder, A15: CellDecoder, A16: CellDecoder, A17: CellDecoder, A18: CellDecoder, A19: CellDecoder, A20: CellDecoder]: RowDecoder[Tuple20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20]] =
    decoder20(Tuple20.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
  implicit def tuple21[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder, A15: CellDecoder, A16: CellDecoder, A17: CellDecoder, A18: CellDecoder, A19: CellDecoder, A20: CellDecoder, A21: CellDecoder]: RowDecoder[Tuple21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21]] =
    decoder21(Tuple21.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
  implicit def tuple22[A1: CellDecoder, A2: CellDecoder, A3: CellDecoder, A4: CellDecoder, A5: CellDecoder, A6: CellDecoder, A7: CellDecoder, A8: CellDecoder, A9: CellDecoder, A10: CellDecoder, A11: CellDecoder, A12: CellDecoder, A13: CellDecoder, A14: CellDecoder, A15: CellDecoder, A16: CellDecoder, A17: CellDecoder, A18: CellDecoder, A19: CellDecoder, A20: CellDecoder, A21: CellDecoder, A22: CellDecoder]: RowDecoder[Tuple22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22]] =
    decoder22(Tuple22.apply[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22])(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)

}
