Я знаю, что TS не поддерживает типы с более высоким родом. В качестве альтернативы для языков без HKT и классов типов существует стиль передачи словаря:
const map = ({map}) => f => tx => map(f) (tx);
const arrMap = f => xs => xs.map(f);
const id = x => x;
const main = map({map: arrMap}) (id);
console.log(main([1,2,3]));
Как мне это ввести в TS?
const map = <A, B, C>(dict: {map: (f: (x: A) => B) => (tx: C) => C}) => (f: (x: A) => B) => (tx: C) =>
dict.map(f) (tx);
const id = <A>(x: A) => x;
const arrMap = <A, B>(f: (x: A) => B) => (xs: A[]) => xs.map(f);
map({ map: arrMap }) (id) ([1, 2, 3]); // type annotation?
Можно ли избежать аннотации типа? Если нет, то как бы это выглядело?