首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fp-ts和URI中类型较高的类型

fp-ts和URI中类型较高的类型
EN

Stack Overflow用户
提问于 2018-04-14 07:10:08
回答 1查看 2.6K关注 0票数 9

在fp-ts中,对于更高类型的类型,他们有这样的解决办法:

代码语言:javascript
复制
export interface HKT<URI, A> {
  readonly _URI: URI;
  readonly _A: A;
}

它可以这样使用:

代码语言:javascript
复制
export interface Foldable<F> {
  readonly URI: F;
  reduce: <A, B>(fa: HKT<F, A>, b: B, f: (b: B, a: A) => B) => B;
}

成员_URI是什么?_A是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-01 15:26:30

这篇文章fp-ts的作者结合有关打字稿的工会类型的文档解释得很好。

_A是我们HKT:HKT<"Option", string> => Option<string>中的值类型。我们稍后将看到映射是如何工作的。

_URI是HKT的标识符,例如Option.ts。它有两个实例,NoneSome,这两个实例都有"Option"作为它们的_URI

Foldable我们可以看到它与AType<F, A>一起在Type类型中使用。假设F == "Option" & A == string所以Type<F, A> == Type<"Option", string>,这非常类似于Option<string>。目前,我们无法将泛型类型传递给另一个泛型类型,因为它的泛型参数是:<F,A>(fa: F<A>)不会编译,这是主要问题。

为了实现Type<"Option", string> => Option<string>,有几个“映射”接口(本文将对此进行解释)。我们可以看到这是为Option 这里完成的

代码语言:javascript
复制
declare module './HKT' {
  interface URI2HKT<A> {
    Option: Option<A>
  }
}

最左边的Option是一个字符串键,最右边的是实际的Option类型,这毕竟是一个正常的记录接口。让我们快速查看Typetype Type<URI extends URIS, A> = URI2HKT<A>[URI]的定义。

URI2HKIT是从"Option"到实际Option的地图。它允许传递2个泛型参数,以获得包装在较高类型中的值类型,从而解决前面提到的泛型问题。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49828862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档