Как написать универсальный компоновщик функций и применить универсальные функции извлечения кортежей (первый, второй) в TypeScript - PullRequest
2 голосов
/ 25 сентября 2019

Я не уверен, что я делаю здесь неправильно:

const first  = <A>([a]: [A, unknown]) => a

const second  = <B>([,b]: [unknown, B]) => b

const tuple = <A>(a: A) => <B>(b: B): [A, B] => [a, b]

type F<A, B> = (a: A) => B

const compose = <B, C>(f: F<B, C>) => <A>(g: F<A, B>) => (a: A) =>
  f(g(a));

const t = tuple(tuple(1)(true))("x")

const x = second(first(t))

const composeSecond = compose(second) // fails

const secondAfterFirst = composeSecond(first)

const y = secondAfterFirst(t)

Не удается compose(second) с:

const second: ([, b]: [unknown, B]) => B Аргумент типа '([, b]: [unknown, B]) => B' нельзя назначить параметру типа 'F'.Типы параметров '__0' и 'a' несовместимы.Тип «unknown» не может быть присвоен типу «[unknown, unknown]».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...