-
Notifications
You must be signed in to change notification settings - Fork 10
DigitList
hkt-toolbelt / DigitList
- Add
- Compare
- Decrement
- Divide
- DivideBySubtraction
- First
- Increment
- IsEven
- IsOdd
- Last
- Modulo
- Multiply
- MultiplyDigit
- MultiplyDigit_T
- Multiply_T
- Pop
- Shift
- Subtract
- ToString
- Trim
Ƭ DigitList: readonly Digit
[]
Ƭ _$add<A
, B
, SUM
, RESULT
>: RESULT
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends DigitList
|
SUM |
_$add2 <A , B > |
RESULT |
SUM extends [] ? [Zero ] : SUM
|
Ƭ _$compare<A
, B
, RESULT
>: RESULT
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends DigitList
|
RESULT |
_$compare2 <A , B > |
Ƭ _$decrement<A
>: _$trim
<A
extends "0"
[] ? ["0"
] : _$decrement2
<A
>>
Name | Type |
---|---|
A |
extends DigitList
|
Ƭ _$divide<A
, B
, OPERATION
>: B
extends [Zero
] ? [Zero
] : B
extends ["1"
] ? OPERATION
extends "DIVIDE"
? A
: [Zero
] : _$divide2
<A
, B
, OPERATION
>
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends DigitList
|
OPERATION |
extends "DIVIDE" | "MODULO" = "DIVIDE"
|
Ƭ _$divideBySubtraction<A
, B
, OPERATION
>: B
extends [Zero
] ? [Zero
] : B
extends ["1"
] ? OPERATION
extends "DIVIDE"
? A
: [Zero
] : _$divideBySubtraction2
<A
, B
, OPERATION
>
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends DigitList
|
OPERATION |
extends "DIVIDE" | "MODULO" = "DIVIDE"
|
digit-list/divide-by-subtraction.ts:31
Ƭ _$first<T
>: T
extends [] ? Zero
: T
extends [infer X, ...unknown[]] ? X
: Zero
Name | Type |
---|---|
T |
extends DigitList
|
Ƭ _$increment<A
, CARRY
, OUTPUT
, A_LAST
, NEXT_A
, INCREMENT
, NEXT_CARRY
, NEXT_OUTPUT
, FINAL_RESULT
, SHORT_CIRCUIT
>: A
extends [] ? FINAL_RESULT
: CARRY
extends "0"
? SHORT_CIRCUIT
: _$increment
<NEXT_A
, NEXT_CARRY
, NEXT_OUTPUT
>
Name | Type |
---|---|
A |
extends DigitList
|
CARRY |
extends Digit = "1"
|
OUTPUT |
extends DigitList = [] |
A_LAST |
extends Digit = _$last <A > |
NEXT_A |
extends DigitList = _$pop <A > |
INCREMENT |
extends Digit = CARRY extends "1" ? _$increment <A_LAST > : A_LAST
|
NEXT_CARRY |
extends Digit = CARRY extends "1" ? _$incrementTens <A_LAST > : "0"
|
NEXT_OUTPUT |
extends DigitList = [INCREMENT , ...OUTPUT] |
FINAL_RESULT |
extends DigitList = CARRY extends "1" ? [CARRY , ...OUTPUT] : OUTPUT
|
SHORT_CIRCUIT |
extends DigitList = [...A, ...OUTPUT] |
Ƭ _$isEven<T
, LAST
>: LAST
extends Zero
| "2"
| "4"
| "6"
| "8"
? true
: false
Name | Type |
---|---|
T |
extends DigitList
|
LAST |
extends Digit = _$last <T > |
Ƭ _$isOdd<T
, LAST
>: LAST
extends "1"
| "3"
| "5"
| "7"
| "9"
? true
: false
Name | Type |
---|---|
T |
extends DigitList
|
LAST |
extends Digit = _$last <T > |
Ƭ _$last<T
>: T
extends [] ? Zero
: T
extends [...unknown[], infer X] ? X
: Zero
Name | Type |
---|---|
T |
extends DigitList
|
Ƭ _$modulo<A
, B
>: _$divide
<A
, B
, "MODULO"
>
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends DigitList
|
Ƭ _$multiply<A
, B
>: _$trim
<_$cast
<_$multiply2
<A
, B
>, DigitList
>>
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends DigitList
|
Ƭ _$multiply2<A
, B
, SCALE
, SUM
, LAST_A
, POP_A
, MUL
, MUL_SCALE
, ADD
, NEXT_SCALE
, DONE
>: DONE
extends true
? SUM
: _$multiply2
<POP_A
, B
, NEXT_SCALE
, ADD
>
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends DigitList
|
SCALE |
extends DigitList = [] |
SUM |
extends DigitList = [] |
LAST_A |
extends Digit = _$last <A > |
POP_A |
extends DigitList = _$pop <A > |
MUL |
extends DigitList = _$multiplyDigit <B , LAST_A > |
MUL_SCALE |
extends DigitList = [...MUL, ...SCALE] |
ADD |
extends DigitList = _$add <SUM , MUL_SCALE > |
NEXT_SCALE |
extends DigitList = [Zero , ...SCALE] |
DONE |
extends boolean = A extends [] ? true : false
|
Ƭ _$multiplyDigit<A
, B
>: B
extends "0"
? ["0"
] : _$multiplyDigit2
<A
, B
>
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends Digit
|
digit-list/multiply-digit.ts:19
Ƭ _$pop<T
>: T
extends [] ? [] : T
extends [...(infer X), unknown
] ? X
: []
Name | Type |
---|---|
T |
extends DigitList
|
Ƭ _$shift<T
>: T
extends [] ? [] : T
extends [unknown
, ...(infer X)] ? X
: []
Name | Type |
---|---|
T |
extends DigitList
|
Ƭ _$subtract<A
, B
>: _$trim
<_$subtract2
<A
, B
>>
Name | Type |
---|---|
A |
extends DigitList
|
B |
extends DigitList
|
Ƭ _$toString<T
, JOIN
, RESULT
>: RESULT
Name | Type |
---|---|
T |
extends DigitList
|
JOIN |
_$toString2 <T > |
RESULT |
JOIN extends "" ? "0" : JOIN
|
Ƭ _$trim<A
, TRIM
, OUTPUT
>: OUTPUT
Name | Type |
---|---|
A |
extends DigitList
|
TRIM |
extends DigitList = _$trim2 <A > |
OUTPUT |
extends DigitList = TRIM extends [] ? ["0" ] : TRIM
|