# @effect/typeclass 中文文档

规范地址：https://npmcn.com/package/%40effect/typeclass/

版本：0\.41\.0
npm 元数据更新时间：2026-09-18T21:18:02.892Z
中文译文更新时间：2026-11-13T08:23:39.359Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40effect/typeclass
原文对照：https://npmcn.com/package/%40effect/typeclass/?lang=original
项目主页：https://effect.website/
源码仓库：https://github.com/Effect-TS/effect

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：631 kB，331 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：effect ^3\.22\.0
- 首次发布：2023-07-09T12:08:47.343Z
- 最新版本发布：2026-07-13T15:34:02.492Z
- 近 30 天下载量：1018887（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：283（近 12 个月 3 个）

## 中文简介

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

## 安装

```sh
npm install @effect/typeclass
```

也可以使用：`pnpm add @effect/typeclass`、`yarn add @effect/typeclass`、`bun add @effect/typeclass`

## README

# 导言

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

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

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

# 混凝土类型

## 成员和衍生职能

注:成员以黑体表示.

### 边界

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

扩展 :

-   `Order`

| 名称 | 鉴于 | 改为: |
| --- | --- | --- |
| **最大边框** |  | `A` |
| **分钟** |  | `A` |
| 倒转 | `Bounded<A>` | `Bounded<A>` |
| 夹子 | `A` | `A` |

### 单词

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`, (中文(简体) ), `A` | `A` |
| **组合许多** | `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>` |
| 常数 | `A` | `Semigroup<A>` |
| 间距 | `A`, (中文(简体) ), `Semigroup<A>` | `Semigroup<A>` |
| 第一个 |  | `Semigroup<A>` |
| 最后一个 |  | `Semigroup<A>` |

# 参数化类型

**参数化类型**

```mermaid
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 => B` | `F<E2, B>` |
| 地图左 | `F<E1, A>`, (中文(简体) ), `E1 => E2` | `F<E2, A>` |
| 地图 | `F<A>`, (中文(简体) ), `A => B` | `F<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 => A` | `F<B>` |
| 对比 | `F<G<A>>`, (中文(简体) ), `A => B` | `F<G<B>>` |
| 图像 | `contramap` | `imap` |

### 副产品

`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 => B` | `F<B>` |
| 映射组合 | `F<G<A>>`, (中文(简体) ), `A => B` | `F<G<B>>` |
| 图像 | `map` | `imap` |
| 襟翼 | `A`, (中文(简体) ), `F<A => B>` | `F<B>` |
| 作为 | `F<A>`, (中文(简体) ), `B` | `F<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 => boolean` | `F<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) => B` | `B` |
| 减小组合 | `F<G<A>>`, (中文(简体) ), `B`, (中文(简体) ), `(B, A) => B` | `B` |
| 减少右边 | `F<A>`, (中文(简体) ), `B`, (中文(简体) ), `(B, A) => B` | `B` |
| 折叠映射 | `F<A>`, (中文(简体) ), `Monoid<M>`, (中文(简体) ), `A => M` | `M` |
| 只读箭头 | `F<A>` | `ReadonlyArray<A>` |
| 仅读箭头 | `F<A>`, (中文(简体) ), `A => B` | `ReadonlyArray<B>` |
| 减少 Kind | `Monad<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 => A` | `F<B>` |
| imap 组合 | `F<G<A>>`, (中文(简体) ), `A => B`, (中文(简体) ), `B => A` | `F<G<B>>` |
| 绑定到 | `F<A>`, (中文(简体) ), `name: string` | `F<{ [name]: A }>` |
| 倾斜 | `F<A>` | `F<[A]>` |

### 修道院

允许依赖性功能的构成 .

扩展 :

-   `FlatMap`
-   `Pointed`

### 员额

| 名称 | 鉴于 | 改为: |
| --- | --- | --- |
| **联 合 国** | `A` | `F<A>` |
| 组合 | `A` | `F<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>>` |
| 页:1 | `F<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 }>` |
| 产品Flatten | `F<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>>` |
| 转弯Tap | `Applicative<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>]>` |
| **转动FilterMap** | `Applicative<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>]>` |

* * *

改编自:

-   [猫](https://github.com/typelevel/cats)
-   [齐奥序曲](https://github.com/zio/zio-prelude)
-   [齐奥加热表](https://github.com/ghostdogpr/zio-cheatsheet)

## 常见问题

### @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 和提交记录判断。

