File: inferenceAndHKTs.ts

package info (click to toggle)
node-typescript 5.1.6%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 492,516 kB
  • sloc: javascript: 2,078,951; makefile: 6; sh: 1
file content (33 lines) | stat: -rw-r--r-- 795 bytes parent folder | download
1
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
// @strict: true
// @noEmit: true

// Repro from #53970

export interface TypeLambda {
    readonly A: unknown;
}

export interface TypeClass<F extends TypeLambda> {
    readonly _F: F;
}

export type Apply<F extends TypeLambda, A> = F extends { readonly type: unknown }
    ? (F & { readonly A: A })['type']
    : { readonly F: F, readonly A: A };

export interface T<A> {
    value: A;
}

export interface TTypeLambda extends TypeLambda {
    readonly type: T<this["A"]>;
}

export declare const map: <F extends TypeLambda>(F: TypeClass<F>) => <A, B>(a: Apply<F, A>, f: (a: A) => B) => Apply<F, B>;

declare const typeClass: TypeClass<TTypeLambda>;

declare const a: T<number>;

const x1 = map(typeClass);
const x2 = map(typeClass)(a, (_) => _);  // T<number>