type StringBool = “true”|”false”; interface AnyNumber { prev?: any, isZero: StringBool }; interface PositiveNumber { prev: any, isZero: “false” }; type IsZero = TNumber[“isZero”]; type Next = { prev: TNumber, isZero: “false” }; type Prev = TNumber[“prev”]; type Add = { “true”: T2, “false”: Next }[IsZero]; // Computes T1 * T2 type Mult = MultAcc;
