pipe & flow Quick Reference
pipe - Transform a Value
typescript
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 - Create Reusable Pipeline
typescript
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']
When to Use
| Use | When |
|---|---|
pipe | Transform a specific value now |
flow | Create reusable transformation |
With fp-ts Types
typescript
import * as O from 'fp-ts/Option' import * as A from 'fp-ts/Array' // Option chain pipe( O.fromNullable(user), O.map(u => u.email), O.getOrElse(() => 'no email') ) // Array chain pipe( users, A.filter(u => u.active), A.map(u => u.name) )
Common Pattern
typescript
// Data last enables partial application const getActiveNames = flow( A.filter((u: User) => u.active), A.map(u => u.name) ) // Reuse anywhere getActiveNames(users1) getActiveNames(users2)