export interface HKT { readonly _A?: unknown; readonly type?: Record; } export type Kind = F extends { readonly type: unknown; } ? (F & { readonly _A: A; })['type'] : // F is generic, we need to mention all of the type parameters { readonly _F: F; readonly _A: () => A; } & Record;