导言
欢迎使用文档 @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> |
参数化类型
参数化类型
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
成员和衍生职能
注:成员以黑体表示.
备选案文
扩展 :
SemiAlternativeCoproduct
实用性
扩展 :
SemiApplicativeProduct
| 名称 | 鉴于 | 改为: |
|---|---|---|
| 升起单曲 | 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> |
可连锁
扩展 :
FlatMapCovariant
| 名称 | 鉴于 | 改为: |
|---|---|---|
| 窃听 | 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]> |
修道院
允许依赖性功能的构成 .
扩展 :
FlatMapPointed
员额
| 名称 | 鉴于 | 改为: |
|---|---|---|
| 联 合 国 | A | F<A> |
| 组合 | A | F<G<A>> |
| 单位 | F<void> | |
| 执行 | F<{}> |
指针
扩展 :
CovariantOf
产品
扩展 :
SemiProductOf
| 名称 | 鉴于 | 改为: |
|---|---|---|
| 全部产品 | Iterable<F<A>> | F<ReadonlyArray<A>> |
| 二联 | [F<A>, F<B>, ...] | F<[A, B, ...]> |
| 结构 | { a: F<A>, b: F<B>, ... } | F<{ a: A, b: B, ... }> |
半替代
扩展 :
SemiCoproductCovariant
半辅助
扩展 :
SemiProductCovariant
| 名称 | 鉴于 | 改为: |
|---|---|---|
| 升起半组 | 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>]> |
改编自: