@effect/typeclass

中文文档
0.41.0发布于 2026/07/13MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 101.9万

效应生态系统可重复使用的类型分类集合

中文使用文档
文档目录26 节
  1. 成员和衍生职能
  2. 边界
  3. 单词
  4. 半组
  5. 成员和衍生职能
  6. 备选案文
  7. 实用性
  8. 比可变体
  9. 可连锁
  10. 相悖性
  11. 副产品
  12. 共变
  13. 可过滤
  14. 平面映射
  15. 可折叠
  16. 变化性
  17. 修道院
  18. 员额
  19. 指针
  20. 产品
  21. 半替代
  22. 半辅助
  23. 半副产品
  24. 半生产
  25. 可移动
  26. 可逆易变

导言

欢迎使用文档 @effect/typeclass, (中文(简体) ), 可重复使用的效应生态系统类型集合。 。 。 .

函数抽象 @effect/typeclass 可以大致分为两类.

  • 混凝土类型摘要 - 这些抽象定义了具体类型的属性,例如: number 财务报告和审定财务报表 string以及结合这些价值观的方法.
  • 参数化类型摘要 - 这些抽象定义参数化类型的属性,例如: ReadonlyArray 财务报告和审定财务报表 Option 以及如何结合它们.

混凝土类型

成员和衍生职能

注:成员以黑体表示.

边界

一个类型类用来命名一个类型的下限和上限.

扩展 :

  • Order
名称鉴于改为:
最大边框A
分钟A
倒转Bounded<A>Bounded<A>
夹子AA

单词

A 类 Monoid 是一个 Semigroup 带着身份 A 类 Monoid 是一个专业 Semigroup因此,它的运作必须是联合的。 此外, x |> combine(empty) == empty |> combine(x) == x。例如,如果 Monoid<String>, (中文(简体) ), 与 combine 作为字符串连接,然后 empty = ""。 。 。 .

扩展 :

  • Semigroup
名称鉴于改为:
空A
全部合并Iterable<A>A
倒转Monoid<A>Monoid<A>
二联[Monoid<A>, Monoid<B>, ...]Monoid<[A, B, ...]>
结构{ a: Monoid<A>, b: Monoid<B>, ... }Monoid<{ a: A, b: B, ... }>
分钟Bounded<A>Monoid<A>
最大数Bounded<A>Monoid<A>

半组

A 类 Semigroup 是任意一组 A (b) 联合作业combine:

x |> combine(y) |> combine(z) == x |> combine(y |> combine(z))

名称鉴于改为:
组合A, (中文(简体) ), AA
组合许多A, (中文(简体) ), Iterable<A>A
倒转Semigroup<A>Semigroup<A>
二联[Semigroup<A>, Semigroup<B>, ...]Semigroup<[A, B, ...]>
结构{ a: Semigroup<A>, b: Semigroup<B>, ... }Semigroup<{ a: A, b: B, ... }>
分钟Order<A>Semigroup<A>
最大数Order<A>Semigroup<A>
常数ASemigroup<A>
间距A, (中文(简体) ), Semigroup<A>Semigroup<A>
第一个Semigroup<A>
最后一个Semigroup<A>

参数化类型

参数化类型

flowchart TD
    Alternative --> SemiAlternative
    Alternative --> Coproduct
    Applicative --> Product
    Coproduct --> SemiCoproduct
    SemiAlternative --> Covariant
    SemiAlternative --> SemiCoproduct
    SemiApplicative --> SemiProduct
    SemiApplicative --> Covariant
    Applicative --> SemiApplicative
    Chainable --> FlatMap
    Chainable ---> Covariant
    Monad --> FlatMap
    Monad --> Pointed
    Pointed --> Of
    Pointed --> Covariant
    Product --> SemiProduct
    Product --> Of
    SemiProduct --> Invariant
    Covariant --> Invariant
    SemiCoproduct --> Invariant

成员和衍生职能

注:成员以黑体表示.

备选案文

扩展 :

  • SemiAlternative
  • Coproduct

实用性

扩展 :

  • SemiApplicative
  • Product
名称鉴于改为:
升起单曲Monoid<A>Monoid<F<A>>

比可变体

产生两种独立、共变类型类型 乐手.

名称鉴于改为:
图片F<E1, A>, (中文(简体) ), E1 => E2, (中文(简体) ), A => BF<E2, B>
地图左F<E1, A>, (中文(简体) ), E1 => E2F<E2, A>
地图F<A>, (中文(简体) ), A => BF<B>

可连锁

扩展 :

  • FlatMap
  • Covariant
名称鉴于改为:
窃听F<A>, (中文(简体) ), A => F<B>F<A>
然后丢弃F<A>, (中文(简体) ), F<B>F<A>
绑定F<A>, (中文(简体) ), name: string, (中文(简体) ), A => F<B>F<A & { [name]: B }>

相悖性

相矛盾的分泌器.

扩展 :

  • Invariant
名称鉴于改为:
对比图F<A>, (中文(简体) ), B => AF<B>
对比F<G<A>>, (中文(简体) ), A => BF<G<B>>
图像contramapimap

副产品

Coproduct 是一种通用的单体,它运作于种类.

此类型类对其类型参数有用 F<_> 有一个 可结合任何特定类型的结构,以及 亦有"零"代表. 因此, Coproduct 就像一个 Monoid 用于种类(即被瘫痪的种类).

A 类 Coproduct<F> 可以产生一个 Monoid<F<A>> 用于任何类型 A。 。 。 .

这是如何区分 Monoid 财务报告和审定财务报表 Coproduct数字 :

  • Monoid<A> 允许 A 要合并的数值,也意味着那里 是一个"空" A 值,该值作为身份函数.

  • Coproduct<F> 允许两个 F<A> 任何 A。 也意味着对于任何 A有一个"零" F<A> 数值。 这个 组合操作和零值仅取决于 联合国 F,但结构上没有 A。 。 。 .

扩展 :

  • SemiCoproduct
名称鉴于改为:
零F<A>
全副产品Iterable<F<A>>F<A>
获取移动Monoid<F<A>>

共变

共相调伏者.

扩展 :

  • Invariant
名称鉴于改为:
地图F<A>, (中文(简体) ), A => BF<B>
映射组合F<G<A>>, (中文(简体) ), A => BF<G<B>>
图像mapimap
襟翼A, (中文(简体) ), F<A => B>F<B>
作为F<A>, (中文(简体) ), BF<B>
作为单位F<A>F<void>

可过滤

Filterable<F> 允许您 map 并同时过滤出元素.

名称鉴于改为:
分区映射F<A>, (中文(简体) ), A => Either<B, C>[F<B>, F<C>]
过滤图F<A>, (中文(简体) ), A => Option<B>F<B>
紧凑F<Option<A>>F<A>
单独F<Either<A, B>>[F<A>, F<B>]
过滤器F<A>, (中文(简体) ), A => booleanF<A>
分区F<A>, (中文(简体) ), A => boolean[F<A>, F<A>]
分区组合F<G<A>>, (中文(简体) ), A => Either<B, C>[F<G<B>>, F<G<C>>]
过滤映射F<G<A>>, (中文(简体) ), A => Option<B>F<G<B>>

平面映射

名称鉴于改为:
平方图F<A>, (中文(简体) ), A => F<B>F<B>
平调F<F<A>>F<A>
接下来F<A>, (中文(简体) ), F<B>F<B>
作曲 Kleisli 箭头A => F<B>, (中文(简体) ), B => F<C>A => F<C>

可折叠

可折叠为汇总值的数据结构.

对于收藏品(例如: ReadonlyArray,这些 方法将叠加(压缩) 以生成一个结果。 大多数收藏类型都有 reduce 方法,通常用于相关 Foldable<F> 举个例子.

名称鉴于改为:
减少F<A>, (中文(简体) ), B, (中文(简体) ), (B, A) => BB
减小组合F<G<A>>, (中文(简体) ), B, (中文(简体) ), (B, A) => BB
减少右边F<A>, (中文(简体) ), B, (中文(简体) ), (B, A) => BB
折叠映射F<A>, (中文(简体) ), Monoid<M>, (中文(简体) ), A => MM
只读箭头F<A>ReadonlyArray<A>
仅读箭头F<A>, (中文(简体) ), A => BReadonlyArray<B>
减少 KindMonad<G>, (中文(简体) ), F<A>, (中文(简体) ), B, (中文(简体) ), (B, A) => G<B>G<B>
减少右键Monad<G>, (中文(简体) ), F<A>, (中文(简体) ), B, (中文(简体) ), (B, A) => G<B>G<B>
折叠地图Coproduct<G>, (中文(简体) ), F<A>, (中文(简体) ), (A) => G<B>G<B>

变化性

无常趣相.

名称鉴于改为:
图像F<A>, (中文(简体) ), A => B, (中文(简体) ), B => AF<B>
imap 组合F<G<A>>, (中文(简体) ), A => B, (中文(简体) ), B => AF<G<B>>
绑定到F<A>, (中文(简体) ), name: stringF<{ [name]: A }>
倾斜F<A>F<[A]>

修道院

允许依赖性功能的构成 .

扩展 :

  • FlatMap
  • Pointed

员额

名称鉴于改为:
联 合 国AF<A>
组合AF<G<A>>
单位F<void>
执行F<{}>

指针

扩展 :

  • Covariant
  • Of

产品

扩展 :

  • SemiProduct
  • Of
名称鉴于改为:
全部产品Iterable<F<A>>F<ReadonlyArray<A>>
二联[F<A>, F<B>, ...]F<[A, B, ...]>
结构{ a: F<A>, b: F<B>, ... }F<{ a: A, b: B, ... }>

半替代

扩展 :

  • SemiCoproduct
  • Covariant

半辅助

扩展 :

  • SemiProduct
  • Covariant
名称鉴于改为:
升起半组Semigroup<A>Semigroup<F<A>>
页:1F<A => B>, (中文(简体) ), F<A>F<B>
然后丢弃F<A>, (中文(简体) ), F<B>F<A>
接下来F<A>, (中文(简体) ), F<B>F<B>
电梯2(A, B) => C(F<A>, F<B>) => F<C>
电梯3(A, B, C) => D(F<A>, F<B>, F<C>) => F<D>

半副产品

SemiCoproduct 是一个通用的半群,以类型为对象.

此类型类对其类型参数有用 F<_> 有一个 用于任何特定类型的结构。 因此, SemiCoproduct 就像一个 Semigroup 类别(即: 类型).

A 类 SemiCoproduct<F> 可以产生一个 Semigroup<F<A>> 用于任何A类.

这是如何区分 Semigroup 财务报告和审定财务报表 SemiCoproduct数字 :

  • Semigroup<A> 允许两个 A 要合并的数值.

  • SemiCoproduct<F> 允许两个 F<A> 任何 A。 。 。 . 组合操作只是取决于结构 F, (中文(简体) ), 但不是结构 A。 。 。 .

扩展 :

  • Invariant
名称鉴于改为:
联合产品F<A>, (中文(简体) ), F<B>F<A | B>
联合产品Iterable<F<A>>F<A>
获取半组Semigroup<F<A>>
联合产品以太F<A>, (中文(简体) ), F<B>F<Either<A, B>>

半生产

扩展 :

  • Invariant
名称鉴于改为:
产品F<A>, (中文(简体) ), F<B>F<[A, B]>
许多产品F<A>, (中文(简体) ), Iterable<F<A>>F<[A, ...ReadonlyArray<A>]>
产品组合F<G<A>>, (中文(简体) ), F<G<B>>F<G<[A, B]>>
产品组合F<G<A>>, (中文(简体) ), Iterable<F<G<A>>>F<G<[A, ...ReadonlyArray<A>]>>
非Empty图[F<A>, F<B>, ...]F<[A, B, ...]>
非文本结构{ a: F<A>, b: F<B>, ... }F<{ a: A, b: B, ... }>
然后宾德F<A>, (中文(简体) ), name: string, (中文(简体) ), F<B>F<A & { [name]: B }>
产品FlattenF<A>, (中文(简体) ), F<B>F<[...A, B]>

可移动

穿过一个有效果的结构.

名称鉴于改为:
转弯Applicative<F>, (中文(简体) ), T<A>, (中文(简体) ), A => F<B>F<T<B>>
转动Applicative<F>, (中文(简体) ), T<G<A>>, (中文(简体) ), A => F<B>F<T<G<B>>>
顺序Applicative<F>, (中文(简体) ), T<F<A>>F<T<A>>
转弯TapApplicative<F>, (中文(简体) ), T<A>, (中文(简体) ), A => F<B>F<T<A>>

可逆易变

TraversableFilterable,也称为 Witherable,代表类似列表的结构 基本上可以有一个 traverse (单位:千美元) filter 作为单一应用 联合行动(traverseFilter) (中文(简体) ).

名称鉴于改为:
横向分区图Applicative<F>, (中文(简体) ), T<A>, (中文(简体) ), A => F<Either<B, C>>F<[T<B>, T<C>]>
转动FilterMapApplicative<F>, (中文(简体) ), T<A>, (中文(简体) ), A => F<Option<B>>F<T<B>>
穿行过滤器Applicative<F>, (中文(简体) ), T<A>, (中文(简体) ), A => F<boolean>F<T<A>>
转动部分Applicative<F>, (中文(简体) ), T<A>, (中文(简体) ), A => F<boolean>F<[T<A>, T<A>]>

改编自:

版本与发布记录

@effect/typeclass 共发布 283 个版本,首次发布于 2023/07/09;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.41.0latest2026/07/134 个月前
0.40.02026/03/207 个月前
0.39.02026/03/177 个月前
0.38.02025/11/041 年前
0.37.02025/09/301.1 年前
0.36.02025/07/221.3 年前

其他发布通道:snapshot → 0.0.0-snapshot-6ebc752baf28354006ca2a0ae783a5bccf5de9ad。

关于 @effect/typeclass 的常见问题

@effect/typeclass 是什么?

效应生态系统可重复使用的类型分类集合

如何安装 @effect/typeclass?

在项目目录运行 npm install @effect/typeclass,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:effect(^3.22.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@effect/typeclass 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@effect/typeclass 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@effect/typeclass 可以商用吗?

@effect/typeclass 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@effect/typeclass 的下载量有多少?

根据 npm 官方下载统计,@effect/typeclass 在 2026/10/13 – 2026/11/11 这 30 天内被下载 1,018,887 次,日均约 33,963 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@effect/typeclass 还在维护吗?

最新版本 0.41.0 发布于 2026/07/13(4 个月前);至今共发布 283 个版本,其中过去 12 个月发布了 3 个;首次发布于 2023/07/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。