如何在“fp-ts”HKT 和 Kind、Kind2、...是匹配类型吗?

How in "fp-ts" HKT and Kind, Kind2, ... are matching types?

提问人:Shnd 提问时间:9/29/2023 更新时间:9/29/2023 访问量:43

问:

按照此链接中的示例进行HKT.ts我们在下面:

export function lift<F extends URIS2>(F: Functor2<F>): <A, B>(f: (a: A) => B) => <E>(fa: Kind2<F, E, A>) => Kind2<F, E, B>
export function lift<F extends URIS>(F: Functor1<F>): <A, B>(f: (a: A) => B) => (fa: Kind<F, A>) => Kind<F, B>
export function lift<F>(F: Functor<F>): <A, B>(f: (a: A) => B) => (fa: HKT<F, A>) => HKT<F, B>
export function lift<F>(F: Functor<F>): <A, B>(f: (a: A) => B) => (fa: HKT<F, A>) => HKT<F, B> {
  return (f) => (fa) => F.map(fa, f)
}

这适用于 ,和 Functors:IdentityOptionEither

const double = (n: number): number => n * 2

const doubleIdentity = lift(I.Functor)(double)
const doubleOption = lift(O.Functor)(double)
const doubleEither = lift(E.Functor)(double)

为什么是最一般和后备的情况。在 和 , , ...,每个的最终类型似乎不匹配!(考虑期权香港电讯的定义)export function lift<F>(F: Functor<F>): <A, B>(f: (a: A) => B) => (fa: HKT<F, A>) => HKT<F, B>HKTKindKind2

此链接中有一篇来自 fp-ts 作者的文章,但在那里,作者已将所有属性添加到 但实际上并没有做同样的事情。HKTOptionfp-ts

有人可以解释一下这个电梯的功能类型和匹配方式吗?KindKind2HKT

字稿 泛型 FP-TS

评论


答: 暂无答案