import type { _AbsNum } from "./internals/_AbsNum"; import type { SMul as SMulNat } from "../Nat/Mul"; import type { Int } from "../aliases"; import type { _HandleNegativeZero } from "../internals/_HandleNegativeZero"; import type { _StrToNum } from "../internals/_StrToNum"; /** * Multiply two {@link Int}s. * * Sig: `(n: Int, m: Int) => Int` */ export type Mul = Int extends N | M ? Int : _StrToNum>; /** * Multiply two string representations of {@link Int}s. * @private */ export type SMul = _HandleNegativeZero< N extends `-${infer N}` ? M extends `-${infer M}` ? SMulNat : `-${SMulNat}` : M extends `-${infer M}` ? `-${SMulNat}` : SMulNat >;