用途
fp-pipe-ref 是一份针对 fp-ts 库中 pipe 与 flow 的快速参考,适合在用户需要链式调用函数、组合操作或构建数据管道时查阅。
主要能力
pipe:转换一个值
import { pipe } from 'fp-ts/function'
// pipe(startValue, fn1, fn2, fn3)
// = fn3(fn2(fn1(startValue)))
const result = pipe(
' hello world ',
s => s.trim(),
s => s.toUpperCase(),
s => s.split(' ')
)
// ['HELLO', 'WORLD']
flow:创建可复用管道
import { flow } from 'fp-ts/function'
// flow(fn1, fn2, fn3) returns a new function
const process = flow(
(s: string) => s.trim(),
s => s.toUpperCase(),
s => s.split(' ')
)
process(' hello world ') // ['HELLO', 'WORLD']
process(' foo bar ') // ['FOO', 'BAR']
何时使用
| 使用 | 时机 |
|---|---|
| pipe | 立即转换某个具体值 |
| flow | 创建可复用的转换 |
与 fp-ts 类型配合
import * as O from 'fp-ts/Option'
import * as A from 'fp-ts/Array'
// Option 链
pipe(
O.fromNullable(user),
O.flatMap(u => O.fromNullable(u.email)),
O.getOrElse(() => 'no email')
)
// Array 链
pipe(
users,
A.filter(u => u.active),
A.map(u => u.name)
)
常见模式
// 数据置于末尾,支持部分应用
const getActiveNames = flow(
A.filter((u: User) => u.active),
A.map(u => u.name)
)
// 可在任何位置复用
getActiveNames(users1)
getActiveNames(users2)
使用方式
该技能通过提供 pipe 与 flow 的代码片段来辅助函数组合与数据管道编排。使用时需自行补充应用变量、类型、校验器与导入,并检查已安装的 fp-ts 版本。
适用场景
- 需要立即转换某个具体值时使用
pipe。 - 需要创建可复用的转换函数时使用
flow。 - 与 fp-ts 的 Option、Array 等模块组合,构建类型安全的数据链。
- 采用数据置于末尾的写法以实现部分应用与复用。
限制
- 仅当任务与上述范围明确匹配时使用本技能。
- 不要将输出视为环境特定验证、测试或专家评审的替代。
- 若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。
- 参考范围:这些是 fp-ts 2.x 片段。需提供应用变量、类型、校验器与导入,并检查已安装版本。
map不会捕获抛出的异常。Task没有类型化错误通道;包装不当的 promise 仍可能 reject。- 应在易失败边界使用
tryCatch。 - 官方 API:fp-ts 模块。