interface HKT { readonly type: this[""]; readonly ""?: unknown; } type Kind = (F & { readonly "": T; })[K]; type Piped< F extends readonly HKT[], T, K extends keyof F[number] = "type" > = F extends [...infer Rest extends HKT[], infer Last extends HKT] ? Kind, K> : T; type Composed< F extends readonly HKT[], T, K extends keyof F[number] = "type" > = F extends [infer First extends HKT, ...infer Rest extends HKT[]] ? Kind, K> : T; export type { HKT, Kind, Piped, Composed };