import {PopFront} from "./pop-front"; import {PushBack} from "./push-back"; /* function generate (count, callback, separator) { if (separator == undefined) { separator = ", "; } const parts = []; for (let i=0; i `${i}: Concat< PushBack, PopFront >`, ",\n "); } generateCases(5); */ export type Concat = ( ( { [index : number] : any, 0: A, 1: PushBack, 2: Concat< PushBack, PopFront >, 3: Concat< PushBack, PopFront >, 4: Concat< PushBack, PopFront >, 5: Concat< PushBack, PopFront >, 6: Concat< PushBack, PopFront >, 7: Concat< PushBack, PopFront >, 8: Concat< PushBack, PopFront >, 9: Concat< PushBack, PopFront >, 10: Concat< PushBack, PopFront >, 11: Concat< PushBack, PopFront >, 12: Concat< PushBack, PopFront >, 13: Concat< PushBack, PopFront >, 14: Concat< PushBack, PopFront >, 15: Concat< PushBack, PopFront >, 16: Concat< PushBack, PopFront >, 17: Concat< PushBack, PopFront >, 18: Concat< PushBack, PopFront >, 19: Concat< PushBack, PopFront >, 20: Concat< PushBack, PopFront >, 21: Concat< PushBack, PopFront >, 22: Concat< PushBack, PopFront >, 23: Concat< PushBack, PopFront >, 24: Concat< PushBack, PopFront >, 25: Concat< PushBack, PopFront >, 26: Concat< PushBack, PopFront >, 27: Concat< PushBack, PopFront >, 28: Concat< PushBack, PopFront >, 29: Concat< PushBack, PopFront >, 30: Concat< PushBack, PopFront >, 31: Concat< PushBack, PopFront >, 32: Concat< PushBack, PopFront >, 33: Concat< PushBack, PopFront >, 34: Concat< PushBack, PopFront >, 35: Concat< PushBack, PopFront >, 36: Concat< PushBack, PopFront >, 37: Concat< PushBack, PopFront >, 38: Concat< PushBack, PopFront >, 39: Concat< PushBack, PopFront >, 40: Concat< PushBack, PopFront >, 41: Concat< PushBack, PopFront >, 42: Concat< PushBack, PopFront >, 43: Concat< PushBack, PopFront >, 44: Concat< PushBack, PopFront >, 45: Concat< PushBack, PopFront >, 46: Concat< PushBack, PopFront >, 47: Concat< PushBack, PopFront >, 48: Concat< PushBack, PopFront >, 49: Concat< PushBack, PopFront > } )[B["length"]] ); export function concat ( a : A, b : B ) : ( Concat ) { return a.concat(b); } /* As of this writing, this more compact version is actually much slower! export type Concat2, B extends Tuple> = ( ( { [index : number] : unknown, 0: A, 1: PushBack, } & { [index in 2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49]: Concat2< PushBack, PopFront > } )[B["length"]] );*/ //const x : Concat<[1,2,3,4,5], [3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,"5",23,"tet",true]> //const x : Concat2<[1,2,3,4,5], [3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,"5",23,"tet",true]>