All Downloads are FREE. Search and download functionalities are using the official Maven repository.

generated.struct.scala Maven / Gradle / Ivy

There is a newer version: 0.12.16
Show newest version
/*
 *  Copyright 2021 Disney Streaming
 *
 *  Licensed under the Tomorrow Open Source Technology License, Version 1.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     https://disneystreaming.github.io/TOST-1.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package schematic

object struct {

  trait Schematic[F[_]] {
    def struct[S](fields: Vector[Field[F, S, _]])(const: Vector[Any] => S): F[S]
   }

  trait OpenSyntax {
    def struct[S[x[_]] <: Schematic[x], Z](const: => Z) : schematic.Schema[S, Z] =
     new Schema(Vector.empty, _ => const)

    def struct[S[x[_]] <: Schematic[x], Z](
      fields: Vector[StructureField[S, Z, _]])(
      const: Vector[Any] => Z) : schematic.Schema[S, Z] =
    new Schema(fields, const)

    def bigStruct[S[x[_]] <: Schematic[x], Z](
      fields: StructureField[S, Z, _]*)(
       const: Vector[Any] => Z) : schematic.Schema[S, Z] =
    new Schema(fields.toVector, const)

    def struct[S[x[_]] <: Schematic[x], Z, A0](a0: StructureField[S, Z, A0])(const : (A0) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0), arr => const(arr(0).asInstanceOf[A0]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1])(const : (A0, A1) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2])(const : (A0, A1, A2) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3])(const : (A0, A1, A2, A3) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4])(const : (A0, A1, A2, A3, A4) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5])(const : (A0, A1, A2, A3, A4, A5) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6])(const : (A0, A1, A2, A3, A4, A5, A6) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7])(const : (A0, A1, A2, A3, A4, A5, A6, A7) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17], a18: StructureField[S, Z, A18])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17], arr(18).asInstanceOf[A18]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17], a18: StructureField[S, Z, A18], a19: StructureField[S, Z, A19])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17], arr(18).asInstanceOf[A18], arr(19).asInstanceOf[A19]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17], a18: StructureField[S, Z, A18], a19: StructureField[S, Z, A19], a20: StructureField[S, Z, A20])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17], arr(18).asInstanceOf[A18], arr(19).asInstanceOf[A19], arr(20).asInstanceOf[A20]))
    def struct[S[x[_]] <: Schematic[x], Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17], a18: StructureField[S, Z, A18], a19: StructureField[S, Z, A19], a20: StructureField[S, Z, A20], a21: StructureField[S, Z, A21])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21) => Z) : schematic.Schema[S, Z] = new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17], arr(18).asInstanceOf[A18], arr(19).asInstanceOf[A19], arr(20).asInstanceOf[A20], arr(21).asInstanceOf[A21]))
  }

  trait ClosedSyntax[S[x[_]] <: Schematic[x]]{
    def struct[Z](const: => Z) : schematic.Schema[S, Z] =
     new Schema(Vector.empty, _ => const)

    def struct[Z](
      fields: Vector[StructureField[S, Z, _]])(
      const: Vector[Any] => Z) : schematic.Schema[S, Z] =
    new Schema(fields, const)

    def bigStruct[Z](
      fields: StructureField[S, Z, _]*)(
      const: Vector[Any] => Z) : schematic.Schema[S, Z] =
    new Schema(fields.toVector, const)

    def struct[Z, A0](a0: StructureField[S, Z, A0])(const : (A0) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0), arr => const(arr(0).asInstanceOf[A0]))
    def struct[Z, A0, A1](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1])(const : (A0, A1) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1]))
    def struct[Z, A0, A1, A2](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2])(const : (A0, A1, A2) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2]))
    def struct[Z, A0, A1, A2, A3](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3])(const : (A0, A1, A2, A3) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3]))
    def struct[Z, A0, A1, A2, A3, A4](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4])(const : (A0, A1, A2, A3, A4) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4]))
    def struct[Z, A0, A1, A2, A3, A4, A5](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5])(const : (A0, A1, A2, A3, A4, A5) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6])(const : (A0, A1, A2, A3, A4, A5, A6) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7])(const : (A0, A1, A2, A3, A4, A5, A6, A7) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17], a18: StructureField[S, Z, A18])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17], arr(18).asInstanceOf[A18]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17], a18: StructureField[S, Z, A18], a19: StructureField[S, Z, A19])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17], arr(18).asInstanceOf[A18], arr(19).asInstanceOf[A19]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17], a18: StructureField[S, Z, A18], a19: StructureField[S, Z, A19], a20: StructureField[S, Z, A20])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17], arr(18).asInstanceOf[A18], arr(19).asInstanceOf[A19], arr(20).asInstanceOf[A20]))
    def struct[Z, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](a0: StructureField[S, Z, A0], a1: StructureField[S, Z, A1], a2: StructureField[S, Z, A2], a3: StructureField[S, Z, A3], a4: StructureField[S, Z, A4], a5: StructureField[S, Z, A5], a6: StructureField[S, Z, A6], a7: StructureField[S, Z, A7], a8: StructureField[S, Z, A8], a9: StructureField[S, Z, A9], a10: StructureField[S, Z, A10], a11: StructureField[S, Z, A11], a12: StructureField[S, Z, A12], a13: StructureField[S, Z, A13], a14: StructureField[S, Z, A14], a15: StructureField[S, Z, A15], a16: StructureField[S, Z, A16], a17: StructureField[S, Z, A17], a18: StructureField[S, Z, A18], a19: StructureField[S, Z, A19], a20: StructureField[S, Z, A20], a21: StructureField[S, Z, A21])(const : (A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21) => Z) : schematic.Schema[S, Z] =  new Schema[S, Z](Vector(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21), arr => const(arr(0).asInstanceOf[A0], arr(1).asInstanceOf[A1], arr(2).asInstanceOf[A2], arr(3).asInstanceOf[A3], arr(4).asInstanceOf[A4], arr(5).asInstanceOf[A5], arr(6).asInstanceOf[A6], arr(7).asInstanceOf[A7], arr(8).asInstanceOf[A8], arr(9).asInstanceOf[A9], arr(10).asInstanceOf[A10], arr(11).asInstanceOf[A11], arr(12).asInstanceOf[A12], arr(13).asInstanceOf[A13], arr(14).asInstanceOf[A14], arr(15).asInstanceOf[A15], arr(16).asInstanceOf[A16], arr(17).asInstanceOf[A17], arr(18).asInstanceOf[A18], arr(19).asInstanceOf[A19], arr(20).asInstanceOf[A20], arr(21).asInstanceOf[A21]))
  }

   class Schema[S[x[_]] <: Schematic[x], Z](
     fields: Vector[StructureField[S, Z, _]],
     const: Vector[Any] => Z
   ) extends schematic.Schema[S, Z]{
     def compile[F[_]](s: S[F]) : F[Z] = s.struct(fields.map(_.compile(s)))(const)
   }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy