@fncts/typelevel 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Any.d.ts +48 -0
- package/Boolean.d.ts +39 -0
- package/BuiltIn.d.ts +3 -0
- package/Check.d.ts +70 -0
- package/Function.d.ts +11 -0
- package/HKT.d.ts +186 -0
- package/Intersection.d.ts +1 -0
- package/Iteration.d.ts +216 -0
- package/List.d.ts +15 -0
- package/Number.d.ts +56 -0
- package/Object.d.ts +118 -0
- package/String.d.ts +8 -0
- package/Union.d.ts +23 -0
- package/_cjs/Any.cjs +6 -0
- package/_cjs/Any.cjs.map +1 -0
- package/_cjs/Boolean.cjs +6 -0
- package/_cjs/Boolean.cjs.map +1 -0
- package/_cjs/BuiltIn.cjs +6 -0
- package/_cjs/BuiltIn.cjs.map +1 -0
- package/_cjs/Check.cjs +6 -0
- package/_cjs/Check.cjs.map +1 -0
- package/_cjs/Function.cjs +6 -0
- package/_cjs/Function.cjs.map +1 -0
- package/_cjs/HKT.cjs +26 -0
- package/_cjs/HKT.cjs.map +1 -0
- package/_cjs/Intersection.cjs +6 -0
- package/_cjs/Intersection.cjs.map +1 -0
- package/_cjs/Iteration.cjs +6 -0
- package/_cjs/Iteration.cjs.map +1 -0
- package/_cjs/List.cjs +6 -0
- package/_cjs/List.cjs.map +1 -0
- package/_cjs/Number.cjs +6 -0
- package/_cjs/Number.cjs.map +1 -0
- package/_cjs/Object.cjs +6 -0
- package/_cjs/Object.cjs.map +1 -0
- package/_cjs/String.cjs +6 -0
- package/_cjs/String.cjs.map +1 -0
- package/_cjs/Union.cjs +6 -0
- package/_cjs/Union.cjs.map +1 -0
- package/_cjs/index.cjs +51 -0
- package/_cjs/index.cjs.map +1 -0
- package/_mjs/Any.mjs +2 -0
- package/_mjs/Any.mjs.map +1 -0
- package/_mjs/Boolean.mjs +2 -0
- package/_mjs/Boolean.mjs.map +1 -0
- package/_mjs/BuiltIn.mjs +2 -0
- package/_mjs/BuiltIn.mjs.map +1 -0
- package/_mjs/Check.mjs +2 -0
- package/_mjs/Check.mjs.map +1 -0
- package/_mjs/Function.mjs +2 -0
- package/_mjs/Function.mjs.map +1 -0
- package/_mjs/HKT.mjs +19 -0
- package/_mjs/HKT.mjs.map +1 -0
- package/_mjs/Intersection.mjs +2 -0
- package/_mjs/Intersection.mjs.map +1 -0
- package/_mjs/Iteration.mjs +2 -0
- package/_mjs/Iteration.mjs.map +1 -0
- package/_mjs/List.mjs +2 -0
- package/_mjs/List.mjs.map +1 -0
- package/_mjs/Number.mjs +2 -0
- package/_mjs/Number.mjs.map +1 -0
- package/_mjs/Object.mjs +2 -0
- package/_mjs/Object.mjs.map +1 -0
- package/_mjs/String.mjs +2 -0
- package/_mjs/String.mjs.map +1 -0
- package/_mjs/Union.mjs +2 -0
- package/_mjs/Union.mjs.map +1 -0
- package/_mjs/index.mjs +21 -0
- package/_mjs/index.mjs.map +1 -0
- package/_src/Any.ts +100 -0
- package/_src/Boolean.ts +44 -0
- package/_src/BuiltIn.ts +7 -0
- package/_src/Check.ts +89 -0
- package/_src/Function.ts +24 -0
- package/_src/HKT.ts +349 -0
- package/_src/Intersection.ts +1 -0
- package/_src/Iteration.ts +224 -0
- package/_src/List.ts +47 -0
- package/_src/Number.ts +137 -0
- package/_src/Object.ts +332 -0
- package/_src/String.ts +28 -0
- package/_src/Union.ts +47 -0
- package/_src/index.ts +11 -0
- package/index.d.ts +11 -0
- package/package.json +13 -0
package/Any.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Boolean, False, True } from "./Boolean.js";
|
|
2
|
+
import type { BuiltIn } from "./BuiltIn.js";
|
|
3
|
+
import type { List } from "./List.js";
|
|
4
|
+
import type { Has } from "./Union.js";
|
|
5
|
+
export declare type Cast<A, B> = A extends B ? A : B;
|
|
6
|
+
export declare type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch;
|
|
7
|
+
export declare type Extends<A, B> = [A] extends [never] ? False : A extends B ? True : False;
|
|
8
|
+
export declare type Contains<A, B> = Extends<A, B> extends True ? True : False;
|
|
9
|
+
export declare type Equals<A, B> = (<X>() => X extends B ? True : False) extends <X>() => X extends A ? True : False ? True : False;
|
|
10
|
+
export declare type If<B extends Boolean, Then, Else = never> = B extends True ? Then : Else;
|
|
11
|
+
export declare type Match = "default" | "extends->" | "contains->" | "equals" | "<-extends" | "<-contains";
|
|
12
|
+
export declare type Is<A, B, _ extends Match> = {
|
|
13
|
+
default: Extends<A, B>;
|
|
14
|
+
"extends->": Extends<A, B>;
|
|
15
|
+
"contains->": Contains<A, B>;
|
|
16
|
+
"<-extends": Extends<B, A>;
|
|
17
|
+
"<-contains": Contains<B, A>;
|
|
18
|
+
equals: Equals<A, B>;
|
|
19
|
+
}[_];
|
|
20
|
+
export declare type Key = string | number | symbol;
|
|
21
|
+
export declare type Literal = string | number | bigint | boolean;
|
|
22
|
+
export declare type Keys<A> = A extends List ? Exclude<keyof A, keyof any[]> | number : keyof A;
|
|
23
|
+
export declare type KnownKeys<A> = {
|
|
24
|
+
[K in keyof A]: string extends K ? never : number extends K ? never : K;
|
|
25
|
+
} extends {
|
|
26
|
+
[K in keyof A]: infer U;
|
|
27
|
+
} ? U & Keys<A> : never;
|
|
28
|
+
export declare type ComputeRaw<A> = A extends Function ? A : {
|
|
29
|
+
[K in keyof A]: A[K];
|
|
30
|
+
} & unknown;
|
|
31
|
+
export declare type ComputeFlat<A> = A extends BuiltIn ? A : A extends Array<any> ? A extends Array<Record<Key, any>> ? Array<{
|
|
32
|
+
[K in keyof A[number]]: A[number][K];
|
|
33
|
+
} & unknown> : A : A extends ReadonlyArray<any> ? A extends ReadonlyArray<Record<Key, any>> ? ReadonlyArray<{
|
|
34
|
+
[K in keyof A[number]]: A[number][K];
|
|
35
|
+
} & unknown> : A : {
|
|
36
|
+
[K in keyof A]: A[K];
|
|
37
|
+
} & unknown;
|
|
38
|
+
export declare type ComputeDeep<A, Seen = never> = A extends BuiltIn ? A : {
|
|
39
|
+
[False]: A extends Array<any> ? A extends Array<Record<Key, any>> ? Array<{
|
|
40
|
+
[K in keyof A[number]]: ComputeDeep<A[number][K], A | Seen>;
|
|
41
|
+
} & unknown> : A : A extends ReadonlyArray<any> ? A extends ReadonlyArray<Record<Key, any>> ? ReadonlyArray<{
|
|
42
|
+
[K in keyof A[number]]: ComputeDeep<A[number][K], A | Seen>;
|
|
43
|
+
} & unknown> : A : {
|
|
44
|
+
[K in keyof A]: ComputeDeep<A[K], A | Seen>;
|
|
45
|
+
} & unknown;
|
|
46
|
+
[True]: A;
|
|
47
|
+
}[Has<Seen, A>];
|
|
48
|
+
export declare type At<A, K extends Key> = A extends List ? number extends A["length"] ? K extends number | `${number}` ? A[never] | undefined : undefined : K extends keyof A ? A[K] : undefined : unknown extends A ? unknown : K extends keyof A ? A[K] : undefined;
|
package/Boolean.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare const False: unique symbol;
|
|
2
|
+
export declare const True: unique symbol;
|
|
3
|
+
export declare type False = typeof False;
|
|
4
|
+
export declare type True = typeof True;
|
|
5
|
+
export declare type Boolean = True | False;
|
|
6
|
+
export declare type Or<B1 extends Boolean, B2 extends Boolean> = {
|
|
7
|
+
[False]: {
|
|
8
|
+
[False]: False;
|
|
9
|
+
[True]: True;
|
|
10
|
+
};
|
|
11
|
+
[True]: {
|
|
12
|
+
[False]: True;
|
|
13
|
+
[True]: True;
|
|
14
|
+
};
|
|
15
|
+
}[B1][B2];
|
|
16
|
+
export declare type And<B1 extends Boolean, B2 extends Boolean> = {
|
|
17
|
+
[False]: {
|
|
18
|
+
[False]: False;
|
|
19
|
+
[True]: False;
|
|
20
|
+
};
|
|
21
|
+
[True]: {
|
|
22
|
+
[False]: False;
|
|
23
|
+
[True]: True;
|
|
24
|
+
};
|
|
25
|
+
}[B1][B2];
|
|
26
|
+
export declare type Xor<B1 extends Boolean, B2 extends Boolean> = {
|
|
27
|
+
[False]: {
|
|
28
|
+
[False]: False;
|
|
29
|
+
[True]: True;
|
|
30
|
+
};
|
|
31
|
+
[True]: {
|
|
32
|
+
[False]: True;
|
|
33
|
+
[True]: False;
|
|
34
|
+
};
|
|
35
|
+
}[B1][B2];
|
|
36
|
+
export declare type Not<B extends Boolean> = {
|
|
37
|
+
[False]: True;
|
|
38
|
+
[True]: False;
|
|
39
|
+
}[B];
|
package/BuiltIn.d.ts
ADDED
package/Check.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { False, True } from "./Boolean.js";
|
|
2
|
+
import type * as Union from "./Union.js";
|
|
3
|
+
declare type EqualsWrapped<T> = T extends infer R & {} ? {
|
|
4
|
+
[P in keyof R]: R[P];
|
|
5
|
+
} : never;
|
|
6
|
+
/**
|
|
7
|
+
* @tsplus type fncts.Check
|
|
8
|
+
*/
|
|
9
|
+
export declare type Check<Condition> = [Condition] extends [never] ? Check.False : Check.True;
|
|
10
|
+
export declare namespace Check {
|
|
11
|
+
/**
|
|
12
|
+
* @tsplus type fncts.Check.True
|
|
13
|
+
*/
|
|
14
|
+
type True = typeof True;
|
|
15
|
+
/**
|
|
16
|
+
* @tsplus type fncts.Check.False
|
|
17
|
+
*/
|
|
18
|
+
type False = typeof False;
|
|
19
|
+
/**
|
|
20
|
+
* @tsplus type fncts.Check.Result
|
|
21
|
+
*/
|
|
22
|
+
type Result = True | False;
|
|
23
|
+
/**
|
|
24
|
+
* @tsplus type fncts.Check.Not
|
|
25
|
+
*/
|
|
26
|
+
type Not<A> = [A] extends [never] ? unknown : never;
|
|
27
|
+
/**
|
|
28
|
+
* @tsplus type fncts.Check.Extends
|
|
29
|
+
*/
|
|
30
|
+
type Extends<A, B> = [A] extends [never] ? never : [A] extends [B] ? unknown : never;
|
|
31
|
+
/**
|
|
32
|
+
* @tsplus type fncts.Check.IsUnion
|
|
33
|
+
*/
|
|
34
|
+
type IsUnion<T> = [T] extends [Union.IntersectionOf<T>] ? never : unknown;
|
|
35
|
+
/**
|
|
36
|
+
* @tsplus type fncts.Check.IsEqual
|
|
37
|
+
*/
|
|
38
|
+
type IsEqual<A, B> = (<T>() => T extends EqualsWrapped<A> ? 1 : 2) extends <T>() => T extends EqualsWrapped<B> ? 1 : 2 ? unknown : never;
|
|
39
|
+
/**
|
|
40
|
+
* @tsplus type fncts.Check.IsLiteral
|
|
41
|
+
*/
|
|
42
|
+
type IsLiteral<A extends string | number> = Not<Extends<string, A> | Extends<number, A>>;
|
|
43
|
+
/**
|
|
44
|
+
* @tsplus type fncts.Check.IsStruct
|
|
45
|
+
*/
|
|
46
|
+
type IsStruct<A> = Extends<keyof A, string> & Not<IsUnion<A>>;
|
|
47
|
+
/**
|
|
48
|
+
* @tsplus type fncts.Check.HaveSameLength
|
|
49
|
+
*/
|
|
50
|
+
type HaveSameLength<A extends {
|
|
51
|
+
length: number;
|
|
52
|
+
}, B extends {
|
|
53
|
+
length: number;
|
|
54
|
+
}> = IsEqual<A["length"], B["length"]>;
|
|
55
|
+
/**
|
|
56
|
+
* @tsplus type fncts.Check.IsTagged
|
|
57
|
+
*/
|
|
58
|
+
type IsTagged<Tag extends PropertyKey, A extends {
|
|
59
|
+
[k in Tag]: string;
|
|
60
|
+
}> = IsUnion<A[Tag]> & IsUnion<A> & HaveSameLength<Union.ListOf<A[Tag]>, Union.ListOf<A>>;
|
|
61
|
+
/**
|
|
62
|
+
* @tsplus type fncts.Check.If
|
|
63
|
+
*/
|
|
64
|
+
type If<B, Then, Else = never> = B extends never ? Else : Then;
|
|
65
|
+
/**
|
|
66
|
+
* @tsplus type fncts.Check.Or
|
|
67
|
+
*/
|
|
68
|
+
type Or<A, B> = A extends never ? B : A;
|
|
69
|
+
}
|
|
70
|
+
export {};
|
package/Function.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Try } from "@fncts/typelevel/Any";
|
|
2
|
+
export declare type Narrowable = string | number | boolean | bigint;
|
|
3
|
+
export declare type Exact<A, B> = B extends unknown ? A extends B ? A extends Narrowable ? A : {
|
|
4
|
+
[K in keyof A]: K extends keyof B ? Exact<A[K], B[K]> : never;
|
|
5
|
+
} : B : never;
|
|
6
|
+
export declare type NoInfer<A> = [A][A extends any ? 0 : never];
|
|
7
|
+
declare type NarrowRaw<A> = (A extends [] ? [] : never) | (A extends Narrowable ? A : never) | {
|
|
8
|
+
[K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>;
|
|
9
|
+
};
|
|
10
|
+
export declare type Narrow<A> = Try<A, [], NarrowRaw<A>>;
|
|
11
|
+
export {};
|
package/HKT.d.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type * as Union from "./Union.js";
|
|
2
|
+
export interface HKT {
|
|
3
|
+
readonly K?: unknown;
|
|
4
|
+
readonly Q?: unknown;
|
|
5
|
+
readonly W?: unknown;
|
|
6
|
+
readonly X?: unknown;
|
|
7
|
+
readonly I?: unknown;
|
|
8
|
+
readonly S?: unknown;
|
|
9
|
+
readonly R?: unknown;
|
|
10
|
+
readonly E?: unknown;
|
|
11
|
+
readonly A?: unknown;
|
|
12
|
+
readonly type?: unknown;
|
|
13
|
+
readonly index?: unknown;
|
|
14
|
+
readonly variance: {
|
|
15
|
+
readonly K?: HKT.Variance;
|
|
16
|
+
readonly Q?: HKT.Variance;
|
|
17
|
+
readonly W?: HKT.Variance;
|
|
18
|
+
readonly X?: HKT.Variance;
|
|
19
|
+
readonly I?: HKT.Variance;
|
|
20
|
+
readonly S?: HKT.Variance;
|
|
21
|
+
readonly R?: HKT.Variance;
|
|
22
|
+
readonly E?: HKT.Variance;
|
|
23
|
+
readonly A?: HKT.Variance;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare namespace HKT {
|
|
27
|
+
const URI: unique symbol;
|
|
28
|
+
const CURI: unique symbol;
|
|
29
|
+
export type Variance = "-" | "+" | "_";
|
|
30
|
+
export type VarianceOf<F extends HKT, N extends ParamName> = F["variance"][N];
|
|
31
|
+
export type CovariantE = HKT & {
|
|
32
|
+
readonly variance: {
|
|
33
|
+
E: "+";
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export type ContravariantR = HKT & {
|
|
37
|
+
readonly variance: {
|
|
38
|
+
R: "-";
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export interface Typeclass<F extends HKT, C = None> {
|
|
42
|
+
readonly [URI]: F;
|
|
43
|
+
readonly [CURI]: C;
|
|
44
|
+
}
|
|
45
|
+
export interface Typeclass2<F extends HKT, G extends HKT, C = None, D = None> {
|
|
46
|
+
readonly _F: F;
|
|
47
|
+
readonly _G: G;
|
|
48
|
+
readonly _CF: C;
|
|
49
|
+
readonly _CG: D;
|
|
50
|
+
}
|
|
51
|
+
export interface Compose2<F extends HKT, G extends HKT, C = None, D = None> extends HKT {
|
|
52
|
+
readonly type: Kind<F, C, this["K"], this["Q"], this["W"], this["X"], this["I"], this["S"], this["R"], this["E"], Kind<G, D, this["K"], this["Q"], this["W"], this["X"], this["I"], this["S"], this["R"], this["E"], this["A"]>>;
|
|
53
|
+
}
|
|
54
|
+
export interface FK<F, K, Q, W, X, I, S, R, E, A> {
|
|
55
|
+
readonly _F: F;
|
|
56
|
+
readonly _K: K;
|
|
57
|
+
readonly _Q: Q;
|
|
58
|
+
readonly _W: W;
|
|
59
|
+
readonly _X: X;
|
|
60
|
+
readonly _I: I;
|
|
61
|
+
readonly _S: S;
|
|
62
|
+
readonly _R: R;
|
|
63
|
+
readonly _E: E;
|
|
64
|
+
readonly _A: A;
|
|
65
|
+
}
|
|
66
|
+
export interface FK1<F, A> {
|
|
67
|
+
readonly _F: F;
|
|
68
|
+
readonly _K: unknown;
|
|
69
|
+
readonly _Q: unknown;
|
|
70
|
+
readonly _W: unknown;
|
|
71
|
+
readonly _X: unknown;
|
|
72
|
+
readonly _I: unknown;
|
|
73
|
+
readonly _S: unknown;
|
|
74
|
+
readonly _R: unknown;
|
|
75
|
+
readonly _E: unknown;
|
|
76
|
+
readonly _A: A;
|
|
77
|
+
}
|
|
78
|
+
export interface F<F> extends HKT {
|
|
79
|
+
readonly type: FK<F, this["K"], this["Q"], this["W"], this["X"], this["I"], this["S"], this["R"], this["E"], this["A"]>;
|
|
80
|
+
readonly variance: {
|
|
81
|
+
readonly K: "_";
|
|
82
|
+
readonly Q: "_";
|
|
83
|
+
readonly W: "_";
|
|
84
|
+
readonly X: "_";
|
|
85
|
+
readonly I: "_";
|
|
86
|
+
readonly S: "_";
|
|
87
|
+
readonly R: "_";
|
|
88
|
+
readonly E: "_";
|
|
89
|
+
readonly A: "_";
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export interface FCoE<F> extends HKT {
|
|
93
|
+
readonly type: FK<F, this["K"], this["Q"], this["W"], this["X"], this["I"], this["S"], this["R"], this["E"], this["A"]>;
|
|
94
|
+
readonly variance: {
|
|
95
|
+
readonly K: "_";
|
|
96
|
+
readonly Q: "_";
|
|
97
|
+
readonly W: "_";
|
|
98
|
+
readonly X: "_";
|
|
99
|
+
readonly I: "_";
|
|
100
|
+
readonly S: "_";
|
|
101
|
+
readonly R: "_";
|
|
102
|
+
readonly E: "+";
|
|
103
|
+
readonly A: "_";
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export interface FContraR<F> extends HKT {
|
|
107
|
+
readonly type: FK<F, this["K"], this["Q"], this["W"], this["X"], this["I"], this["S"], this["R"], this["E"], this["A"]>;
|
|
108
|
+
readonly variance: {
|
|
109
|
+
readonly K: "_";
|
|
110
|
+
readonly Q: "_";
|
|
111
|
+
readonly W: "_";
|
|
112
|
+
readonly X: "_";
|
|
113
|
+
readonly I: "_";
|
|
114
|
+
readonly S: "_";
|
|
115
|
+
readonly R: "-";
|
|
116
|
+
readonly E: "_";
|
|
117
|
+
readonly A: "_";
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export type ParamName = "K" | "Q" | "W" | "X" | "I" | "S" | "R" | "E" | "A";
|
|
121
|
+
export type Kind<F extends HKT, C, K, Q, W, X, I, S, R, E, A> = F extends {
|
|
122
|
+
readonly type: unknown;
|
|
123
|
+
} ? (F & {
|
|
124
|
+
readonly K: OrFix<C, "K", K>;
|
|
125
|
+
readonly Q: OrFix<C, "Q", Q>;
|
|
126
|
+
readonly W: OrFix<C, "W", W>;
|
|
127
|
+
readonly X: OrFix<C, "X", X>;
|
|
128
|
+
readonly I: OrFix<C, "I", I>;
|
|
129
|
+
readonly S: OrFix<C, "S", S>;
|
|
130
|
+
readonly R: OrFix<C, "R", R>;
|
|
131
|
+
readonly E: OrFix<C, "E", E>;
|
|
132
|
+
readonly A: A;
|
|
133
|
+
})["type"] : FK<F, K, Q, W, X, I, S, R, E, A>;
|
|
134
|
+
export type Infer<F extends HKT, C, N extends ParamName | "C", K> = [K] extends [
|
|
135
|
+
Kind<F, C, infer K, infer Q, infer W, infer X, infer I, infer S, infer R, infer E, infer A>
|
|
136
|
+
] ? N extends "C" ? C : N extends "K" ? K : N extends "Q" ? Q : N extends "W" ? W : N extends "X" ? X : N extends "I" ? I : N extends "S" ? S : N extends "R" ? R : N extends "E" ? E : N extends "A" ? A : never : never;
|
|
137
|
+
export interface Lows {
|
|
138
|
+
"-": unknown;
|
|
139
|
+
"+": never;
|
|
140
|
+
_: any;
|
|
141
|
+
}
|
|
142
|
+
export type Low<F extends HKT, N extends ParamName> = F["variance"][N] extends Variance ? Lows[F["variance"][N]] : never;
|
|
143
|
+
export interface Mixes<P extends ReadonlyArray<unknown>> {
|
|
144
|
+
"-": P extends [any] ? P[0] : P extends [any, any] ? P[0] & P[1] : P extends [any, any, any] ? P[0] & P[1] & P[2] : P extends [any, any, any, any] ? P[0] & P[1] & P[2] & P[3] : P extends [any, any, any, any, any] ? P[0] & P[1] & P[2] & P[3] & P[4] : Union.IntersectionOf<P[number]>;
|
|
145
|
+
"+": P[number];
|
|
146
|
+
_: P[0];
|
|
147
|
+
}
|
|
148
|
+
export type Mix<F extends HKT, N extends ParamName, P extends ReadonlyArray<unknown>> = F["variance"][N] extends Variance ? Mixes<P>[F["variance"][N]] : P[0];
|
|
149
|
+
export type OrNever<K> = unknown extends K ? never : K;
|
|
150
|
+
export type MixStruct<F extends HKT, N extends ParamName, X, Y> = F["variance"][N] extends "_" ? X : F["variance"][N] extends "+" ? Y[keyof Y] : F["variance"][N] extends "-" ? Union.IntersectionOf<{
|
|
151
|
+
[k in keyof Y]: OrNever<Y[k]>;
|
|
152
|
+
}[keyof Y]> : X;
|
|
153
|
+
export interface Intros<A, B> {
|
|
154
|
+
"-": B;
|
|
155
|
+
"+": B;
|
|
156
|
+
_: A;
|
|
157
|
+
}
|
|
158
|
+
export type Intro<F extends HKT, N extends ParamName, A, B> = F["variance"][N] extends Variance ? Intros<A, B>[F["variance"][N]] : A;
|
|
159
|
+
/**
|
|
160
|
+
* Type parameter constraint
|
|
161
|
+
*/
|
|
162
|
+
export type None = {};
|
|
163
|
+
const Fix: unique symbol;
|
|
164
|
+
export interface Fix<N extends ParamName, A> {
|
|
165
|
+
[Fix]: {
|
|
166
|
+
[K in N]: () => A;
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const Extend: unique symbol;
|
|
170
|
+
export interface Extend<N extends ParamName, A> {
|
|
171
|
+
[Extend]: {
|
|
172
|
+
[K in N]: () => A;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
export type OrFix<C, N extends ParamName, A> = C extends Fix<N, infer X> ? X : A;
|
|
176
|
+
export type OrExtend<C, N extends ParamName, A> = C extends Extend<N, infer X> ? A extends X ? A : X : A;
|
|
177
|
+
export type GetExtends<C, N extends ParamName, A> = C extends Extend<N, infer X> ? X : A;
|
|
178
|
+
export type IndexFor<F extends HKT, K> = F extends {
|
|
179
|
+
readonly index: unknown;
|
|
180
|
+
} ? F["index"] : K;
|
|
181
|
+
/**
|
|
182
|
+
* @tsplus macro identity
|
|
183
|
+
*/
|
|
184
|
+
export function instance<F>(_: Omit<F, typeof URI | typeof CURI | "_F" | "_G" | "_CF" | "_CG">): F;
|
|
185
|
+
export {};
|
|
186
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare type Erase<A, B> = A & B extends B & infer C ? C : A;
|
package/Iteration.d.ts
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
export declare type Iteration = [
|
|
2
|
+
value: number,
|
|
3
|
+
sign: "-" | "0" | "+",
|
|
4
|
+
prev: keyof IterationMap,
|
|
5
|
+
next: keyof IterationMap,
|
|
6
|
+
oppo: keyof IterationMap
|
|
7
|
+
];
|
|
8
|
+
export declare type IterationMap = {
|
|
9
|
+
__: [number, "-" | "0" | "+", "__", "__", "__"];
|
|
10
|
+
"-100": [-100, "-", "__", "-99", "100"];
|
|
11
|
+
"-99": [-99, "-", "-100", "-98", "99"];
|
|
12
|
+
"-98": [-98, "-", "-99", "-97", "98"];
|
|
13
|
+
"-97": [-97, "-", "-98", "-96", "97"];
|
|
14
|
+
"-96": [-96, "-", "-97", "-95", "96"];
|
|
15
|
+
"-95": [-95, "-", "-96", "-94", "95"];
|
|
16
|
+
"-94": [-94, "-", "-95", "-93", "94"];
|
|
17
|
+
"-93": [-93, "-", "-94", "-92", "93"];
|
|
18
|
+
"-92": [-92, "-", "-93", "-91", "92"];
|
|
19
|
+
"-91": [-91, "-", "-92", "-90", "91"];
|
|
20
|
+
"-90": [-90, "-", "-91", "-89", "90"];
|
|
21
|
+
"-89": [-89, "-", "-90", "-88", "89"];
|
|
22
|
+
"-88": [-88, "-", "-89", "-87", "88"];
|
|
23
|
+
"-87": [-87, "-", "-88", "-86", "87"];
|
|
24
|
+
"-86": [-86, "-", "-87", "-85", "86"];
|
|
25
|
+
"-85": [-85, "-", "-86", "-84", "85"];
|
|
26
|
+
"-84": [-84, "-", "-85", "-83", "84"];
|
|
27
|
+
"-83": [-83, "-", "-84", "-82", "83"];
|
|
28
|
+
"-82": [-82, "-", "-83", "-81", "82"];
|
|
29
|
+
"-81": [-81, "-", "-82", "-80", "81"];
|
|
30
|
+
"-80": [-80, "-", "-81", "-79", "80"];
|
|
31
|
+
"-79": [-79, "-", "-80", "-78", "79"];
|
|
32
|
+
"-78": [-78, "-", "-79", "-77", "78"];
|
|
33
|
+
"-77": [-77, "-", "-78", "-76", "77"];
|
|
34
|
+
"-76": [-76, "-", "-77", "-75", "76"];
|
|
35
|
+
"-75": [-75, "-", "-76", "-74", "75"];
|
|
36
|
+
"-74": [-74, "-", "-75", "-73", "74"];
|
|
37
|
+
"-73": [-73, "-", "-74", "-72", "73"];
|
|
38
|
+
"-72": [-72, "-", "-73", "-71", "72"];
|
|
39
|
+
"-71": [-71, "-", "-72", "-70", "71"];
|
|
40
|
+
"-70": [-70, "-", "-71", "-69", "70"];
|
|
41
|
+
"-69": [-69, "-", "-70", "-68", "69"];
|
|
42
|
+
"-68": [-68, "-", "-69", "-67", "68"];
|
|
43
|
+
"-67": [-67, "-", "-68", "-66", "67"];
|
|
44
|
+
"-66": [-66, "-", "-67", "-65", "66"];
|
|
45
|
+
"-65": [-65, "-", "-66", "-64", "65"];
|
|
46
|
+
"-64": [-64, "-", "-65", "-63", "64"];
|
|
47
|
+
"-63": [-63, "-", "-64", "-62", "63"];
|
|
48
|
+
"-62": [-62, "-", "-63", "-61", "62"];
|
|
49
|
+
"-61": [-61, "-", "-62", "-60", "61"];
|
|
50
|
+
"-60": [-60, "-", "-61", "-59", "60"];
|
|
51
|
+
"-59": [-59, "-", "-60", "-58", "59"];
|
|
52
|
+
"-58": [-58, "-", "-59", "-57", "58"];
|
|
53
|
+
"-57": [-57, "-", "-58", "-56", "57"];
|
|
54
|
+
"-56": [-56, "-", "-57", "-55", "56"];
|
|
55
|
+
"-55": [-55, "-", "-56", "-54", "55"];
|
|
56
|
+
"-54": [-54, "-", "-55", "-53", "54"];
|
|
57
|
+
"-53": [-53, "-", "-54", "-52", "53"];
|
|
58
|
+
"-52": [-52, "-", "-53", "-51", "52"];
|
|
59
|
+
"-51": [-51, "-", "-52", "-50", "51"];
|
|
60
|
+
"-50": [-50, "-", "-51", "-49", "50"];
|
|
61
|
+
"-49": [-49, "-", "-50", "-48", "49"];
|
|
62
|
+
"-48": [-48, "-", "-49", "-47", "48"];
|
|
63
|
+
"-47": [-47, "-", "-48", "-46", "47"];
|
|
64
|
+
"-46": [-46, "-", "-47", "-45", "46"];
|
|
65
|
+
"-45": [-45, "-", "-46", "-44", "45"];
|
|
66
|
+
"-44": [-44, "-", "-45", "-43", "44"];
|
|
67
|
+
"-43": [-43, "-", "-44", "-42", "43"];
|
|
68
|
+
"-42": [-42, "-", "-43", "-41", "42"];
|
|
69
|
+
"-41": [-41, "-", "-42", "-40", "41"];
|
|
70
|
+
"-40": [-40, "-", "-41", "-39", "40"];
|
|
71
|
+
"-39": [-39, "-", "-40", "-38", "39"];
|
|
72
|
+
"-38": [-38, "-", "-39", "-37", "38"];
|
|
73
|
+
"-37": [-37, "-", "-38", "-36", "37"];
|
|
74
|
+
"-36": [-36, "-", "-37", "-35", "36"];
|
|
75
|
+
"-35": [-35, "-", "-36", "-34", "35"];
|
|
76
|
+
"-34": [-34, "-", "-35", "-33", "34"];
|
|
77
|
+
"-33": [-33, "-", "-34", "-32", "33"];
|
|
78
|
+
"-32": [-32, "-", "-33", "-31", "32"];
|
|
79
|
+
"-31": [-31, "-", "-32", "-30", "31"];
|
|
80
|
+
"-30": [-30, "-", "-31", "-29", "30"];
|
|
81
|
+
"-29": [-29, "-", "-30", "-28", "29"];
|
|
82
|
+
"-28": [-28, "-", "-29", "-27", "28"];
|
|
83
|
+
"-27": [-27, "-", "-28", "-26", "27"];
|
|
84
|
+
"-26": [-26, "-", "-27", "-25", "26"];
|
|
85
|
+
"-25": [-25, "-", "-26", "-24", "25"];
|
|
86
|
+
"-24": [-24, "-", "-25", "-23", "24"];
|
|
87
|
+
"-23": [-23, "-", "-24", "-22", "23"];
|
|
88
|
+
"-22": [-22, "-", "-23", "-21", "22"];
|
|
89
|
+
"-21": [-21, "-", "-22", "-20", "21"];
|
|
90
|
+
"-20": [-20, "-", "-21", "-19", "20"];
|
|
91
|
+
"-19": [-19, "-", "-20", "-18", "19"];
|
|
92
|
+
"-18": [-18, "-", "-19", "-17", "18"];
|
|
93
|
+
"-17": [-17, "-", "-18", "-16", "17"];
|
|
94
|
+
"-16": [-16, "-", "-17", "-15", "16"];
|
|
95
|
+
"-15": [-15, "-", "-16", "-14", "15"];
|
|
96
|
+
"-14": [-14, "-", "-15", "-13", "14"];
|
|
97
|
+
"-13": [-13, "-", "-14", "-12", "13"];
|
|
98
|
+
"-12": [-12, "-", "-13", "-11", "12"];
|
|
99
|
+
"-11": [-11, "-", "-12", "-10", "11"];
|
|
100
|
+
"-10": [-10, "-", "-11", "-9", "10"];
|
|
101
|
+
"-9": [-9, "-", "-10", "-8", "9"];
|
|
102
|
+
"-8": [-8, "-", "-9", "-7", "8"];
|
|
103
|
+
"-7": [-7, "-", "-8", "-6", "7"];
|
|
104
|
+
"-6": [-6, "-", "-7", "-5", "6"];
|
|
105
|
+
"-5": [-5, "-", "-6", "-4", "5"];
|
|
106
|
+
"-4": [-4, "-", "-5", "-3", "4"];
|
|
107
|
+
"-3": [-3, "-", "-4", "-2", "3"];
|
|
108
|
+
"-2": [-2, "-", "-3", "-1", "2"];
|
|
109
|
+
"-1": [-1, "-", "-2", "0", "1"];
|
|
110
|
+
"0": [0, "0", "-1", "1", "0"];
|
|
111
|
+
"1": [1, "+", "0", "2", "-1"];
|
|
112
|
+
"2": [2, "+", "1", "3", "-2"];
|
|
113
|
+
"3": [3, "+", "2", "4", "-3"];
|
|
114
|
+
"4": [4, "+", "3", "5", "-4"];
|
|
115
|
+
"5": [5, "+", "4", "6", "-5"];
|
|
116
|
+
"6": [6, "+", "5", "7", "-6"];
|
|
117
|
+
"7": [7, "+", "6", "8", "-7"];
|
|
118
|
+
"8": [8, "+", "7", "9", "-8"];
|
|
119
|
+
"9": [9, "+", "8", "10", "-9"];
|
|
120
|
+
"10": [10, "+", "9", "11", "-10"];
|
|
121
|
+
"11": [11, "+", "10", "12", "-11"];
|
|
122
|
+
"12": [12, "+", "11", "13", "-12"];
|
|
123
|
+
"13": [13, "+", "12", "14", "-13"];
|
|
124
|
+
"14": [14, "+", "13", "15", "-14"];
|
|
125
|
+
"15": [15, "+", "14", "16", "-15"];
|
|
126
|
+
"16": [16, "+", "15", "17", "-16"];
|
|
127
|
+
"17": [17, "+", "16", "18", "-17"];
|
|
128
|
+
"18": [18, "+", "17", "19", "-18"];
|
|
129
|
+
"19": [19, "+", "18", "20", "-19"];
|
|
130
|
+
"20": [20, "+", "19", "21", "-20"];
|
|
131
|
+
"21": [21, "+", "20", "22", "-21"];
|
|
132
|
+
"22": [22, "+", "21", "23", "-22"];
|
|
133
|
+
"23": [23, "+", "22", "24", "-23"];
|
|
134
|
+
"24": [24, "+", "23", "25", "-24"];
|
|
135
|
+
"25": [25, "+", "24", "26", "-25"];
|
|
136
|
+
"26": [26, "+", "25", "27", "-26"];
|
|
137
|
+
"27": [27, "+", "26", "28", "-27"];
|
|
138
|
+
"28": [28, "+", "27", "29", "-28"];
|
|
139
|
+
"29": [29, "+", "28", "30", "-29"];
|
|
140
|
+
"30": [30, "+", "29", "31", "-30"];
|
|
141
|
+
"31": [31, "+", "30", "32", "-31"];
|
|
142
|
+
"32": [32, "+", "31", "33", "-32"];
|
|
143
|
+
"33": [33, "+", "32", "34", "-33"];
|
|
144
|
+
"34": [34, "+", "33", "35", "-34"];
|
|
145
|
+
"35": [35, "+", "34", "36", "-35"];
|
|
146
|
+
"36": [36, "+", "35", "37", "-36"];
|
|
147
|
+
"37": [37, "+", "36", "38", "-37"];
|
|
148
|
+
"38": [38, "+", "37", "39", "-38"];
|
|
149
|
+
"39": [39, "+", "38", "40", "-39"];
|
|
150
|
+
"40": [40, "+", "39", "41", "-40"];
|
|
151
|
+
"41": [41, "+", "40", "42", "-41"];
|
|
152
|
+
"42": [42, "+", "41", "43", "-42"];
|
|
153
|
+
"43": [43, "+", "42", "44", "-43"];
|
|
154
|
+
"44": [44, "+", "43", "45", "-44"];
|
|
155
|
+
"45": [45, "+", "44", "46", "-45"];
|
|
156
|
+
"46": [46, "+", "45", "47", "-46"];
|
|
157
|
+
"47": [47, "+", "46", "48", "-47"];
|
|
158
|
+
"48": [48, "+", "47", "49", "-48"];
|
|
159
|
+
"49": [49, "+", "48", "50", "-49"];
|
|
160
|
+
"50": [50, "+", "49", "51", "-50"];
|
|
161
|
+
"51": [51, "+", "50", "52", "-51"];
|
|
162
|
+
"52": [52, "+", "51", "53", "-52"];
|
|
163
|
+
"53": [53, "+", "52", "54", "-53"];
|
|
164
|
+
"54": [54, "+", "53", "55", "-54"];
|
|
165
|
+
"55": [55, "+", "54", "56", "-55"];
|
|
166
|
+
"56": [56, "+", "55", "57", "-56"];
|
|
167
|
+
"57": [57, "+", "56", "58", "-57"];
|
|
168
|
+
"58": [58, "+", "57", "59", "-58"];
|
|
169
|
+
"59": [59, "+", "58", "60", "-59"];
|
|
170
|
+
"60": [60, "+", "59", "61", "-60"];
|
|
171
|
+
"61": [61, "+", "60", "62", "-61"];
|
|
172
|
+
"62": [62, "+", "61", "63", "-62"];
|
|
173
|
+
"63": [63, "+", "62", "64", "-63"];
|
|
174
|
+
"64": [64, "+", "63", "65", "-64"];
|
|
175
|
+
"65": [65, "+", "64", "66", "-65"];
|
|
176
|
+
"66": [66, "+", "65", "67", "-66"];
|
|
177
|
+
"67": [67, "+", "66", "68", "-67"];
|
|
178
|
+
"68": [68, "+", "67", "69", "-68"];
|
|
179
|
+
"69": [69, "+", "68", "70", "-69"];
|
|
180
|
+
"70": [70, "+", "69", "71", "-70"];
|
|
181
|
+
"71": [71, "+", "70", "72", "-71"];
|
|
182
|
+
"72": [72, "+", "71", "73", "-72"];
|
|
183
|
+
"73": [73, "+", "72", "74", "-73"];
|
|
184
|
+
"74": [74, "+", "73", "75", "-74"];
|
|
185
|
+
"75": [75, "+", "74", "76", "-75"];
|
|
186
|
+
"76": [76, "+", "75", "77", "-76"];
|
|
187
|
+
"77": [77, "+", "76", "78", "-77"];
|
|
188
|
+
"78": [78, "+", "77", "79", "-78"];
|
|
189
|
+
"79": [79, "+", "78", "80", "-79"];
|
|
190
|
+
"80": [80, "+", "79", "81", "-80"];
|
|
191
|
+
"81": [81, "+", "80", "82", "-81"];
|
|
192
|
+
"82": [82, "+", "81", "83", "-82"];
|
|
193
|
+
"83": [83, "+", "82", "84", "-83"];
|
|
194
|
+
"84": [84, "+", "83", "85", "-84"];
|
|
195
|
+
"85": [85, "+", "84", "86", "-85"];
|
|
196
|
+
"86": [86, "+", "85", "87", "-86"];
|
|
197
|
+
"87": [87, "+", "86", "88", "-87"];
|
|
198
|
+
"88": [88, "+", "87", "89", "-88"];
|
|
199
|
+
"89": [89, "+", "88", "90", "-89"];
|
|
200
|
+
"90": [90, "+", "89", "91", "-90"];
|
|
201
|
+
"91": [91, "+", "90", "92", "-91"];
|
|
202
|
+
"92": [92, "+", "91", "93", "-92"];
|
|
203
|
+
"93": [93, "+", "92", "94", "-93"];
|
|
204
|
+
"94": [94, "+", "93", "95", "-94"];
|
|
205
|
+
"95": [95, "+", "94", "96", "-95"];
|
|
206
|
+
"96": [96, "+", "95", "97", "-96"];
|
|
207
|
+
"97": [97, "+", "96", "98", "-97"];
|
|
208
|
+
"98": [98, "+", "97", "99", "-98"];
|
|
209
|
+
"99": [99, "+", "98", "100", "-99"];
|
|
210
|
+
"100": [100, "+", "99", "__", "-100"];
|
|
211
|
+
};
|
|
212
|
+
export declare type IterationOf<N extends number> = `${N}` extends keyof IterationMap ? IterationMap[`${N}`] : IterationMap["__"];
|
|
213
|
+
export declare type Next<I extends Iteration> = IterationMap[I[3]];
|
|
214
|
+
export declare type Prev<I extends Iteration> = IterationMap[I[2]];
|
|
215
|
+
export declare type Pos<I extends Iteration> = I[0];
|
|
216
|
+
export declare type Key<I extends Iteration> = `${Pos<I>}`;
|
package/List.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type * as O from "./Object.js";
|
|
2
|
+
export declare type List<A = any> = ReadonlyArray<A>;
|
|
3
|
+
export declare type Prepend<L extends List, A> = [A, ...L];
|
|
4
|
+
export declare type Append<L extends List, A> = [...L, A];
|
|
5
|
+
export declare type Concat<L1 extends List, L2 extends List> = [...L1, ...L2];
|
|
6
|
+
export declare type Length<L extends List> = L["length"];
|
|
7
|
+
export declare type Head<L extends List> = L[0];
|
|
8
|
+
export declare type Tail<L extends List> = L extends readonly [] ? L : L extends readonly [any?, ...infer Tail] ? Tail : L;
|
|
9
|
+
export declare type Init<L extends List> = L extends readonly [] ? L : L extends readonly [...infer Init, any?] ? Init : L;
|
|
10
|
+
export declare type Last<L extends List> = L[Length<Tail<L>>];
|
|
11
|
+
export declare type UnionOf<L extends List> = L[number];
|
|
12
|
+
export declare type PrependAll<L extends List, A, O extends List = []> = Length<L> extends 0 ? O : PrependAll<Tail<L>, A, [...O, A, Head<L>]>;
|
|
13
|
+
export declare type Pop<L extends List> = L extends readonly [...infer LBody, any] | readonly [...infer LBody, any?] ? LBody : L;
|
|
14
|
+
export declare type ObjectOf<L extends List> = L extends unknown ? number extends Length<L> ? O._Pick<L, number> : O._Omit<L, keyof any[]> : never;
|
|
15
|
+
export declare type RequiredKeys<L extends List> = O.RequiredKeys<ObjectOf<L>>;
|